AgenticFunding
framework & deal-package standard · docs
Framework
AgenticFundingFor credit teamsReference architecturePlatform architectureCapability model
Standard
OverviewLending coverageTerminology & conformancePack structureDisposition messagesSharia-compliant structuringLifecycleThe Pack Summary sheetGlossary
Data model
Entity modelProvenance modelReadiness & conformance levelsField catalogue (data dictionary)Code listsReference dataJSON Schema
Tooling
Ops APIReference validatorExample packsProducing packsArtifacts & downloads
Interop & governance
CrosswalksRegulatory notesParticipateGovernance, IP & licensing

Ops API

The standard says what a funding pack must prove. This is the API a firm uses to produce one — cases, checklists, chasing, and the audit trail underneath. Two halves of the same argument.

Authentication and scoping

A broker signs in by one-time code; the session is a signed vouch_broker_session cookie. Every request resolves to a firm (org) and a user.

  • 401 — no valid session.
  • 404 — the case is not in your firm. Deliberately not 403: a 403 would confirm that a case with that id exists somewhere, which discloses one firm's book to another. Absence of disclosure is the point.

Org scoping is enforced in the data layer, not the UI. There is no query path that returns another firm's case.

The case lifecycle

collecting → checking → ready → submitted, plus closed. Transitions are validated server-side; closed is terminal. An invalid transition is a 400 with a reason, never a silent no-op.

Derived fields — the ones the queue is built on

Every case carries four computed values. They are computed server-side on purpose: two implementations of one rule is how a board and a work queue start disagreeing about what needs doing.

FieldMeaning
ball_withExactly one of borrower | machine | broker | lender — whose court the case sits in.
completenessHow much of the required checklist is satisfied.
staleness_daysWhole days since the case last moved.
sla{target_days, days, breached, over_by}. The target depends on who holds the ball — ten days with a lender is ordinary, one day with the verification engine means something is stuck.

A case needs a human when ball_with === "broker" OR it is stale beyond its threshold, whoever holds it. The second half matters: a case sitting with the borrower for ten days is not "fine, we're waiting" — it means the chase has failed, which is exactly when a person should step in.

The work queue

GET /broker/queue returns only cases needing a human, ordered: yours, then unassigned, then colleagues' — and within each band, breached first, worst overrun first, then oldest.

Two deliberate choices worth knowing before you build on it. Unassigned outranks a colleague's work, because a case nobody has picked up is the one most likely to be dropped. And ownership outranks a breach — this is a personal work queue, not a firm dashboard; if a colleague's emergency reordered your list, nobody could trust the top of it. Firm-wide breach counts are separate.

The audit trail

GET /broker/cases/{id}/events — append-only, chronological. Nothing rewrites history.

  • case_created, status_changed, item_added, item_status_changed, item_waived
  • chase_sent, chase_blocked — including why a chase did not go
  • case_assigned — carries the previous owner, because "who was responsible on the day" cannot be reconstructed from the current value
  • case_reviewed_no_action — a human looked and decided nothing was needed. It changes nothing about the case, deliberately: it does not even touch updated_at, because that would reset staleness and make an untouched case look freshly worked. "Nobody flagged it" and "somebody looked and judged it fine" are different facts, and only the second is oversight.

Extending it — the three adapter families

Adding a provider means registering a class. Nothing else changes.

  1. LenderAdapter — one pack out to a lender's own schema. Where a lender has no API, the same pack becomes a pre-filled deal sheet by email.
  2. ContactChannelAdapter — how the borrower is reached. Email routes through a single suppression and unsubscribe choke point.
  3. SourceAdapter — verified facts in, from the system that witnessed the work. Pay-per-search sources route through a shared control layer enforcing consent, an explicit payer, metering and idempotency.

Integration shape, stated plainly

Polling, not webhooks. There is no event push today. A consumer polls /broker/queue or the case endpoints. Saying so is better than implying an event stream that would have to be built after you designed against it.

AgenticFunding →

AgenticFunding

framework · draft · open by design

AgenticFunding is a platform architecture for agent-operated loan origination. Origination today runs through people and loses information along the way. A borrower or broker assembles a case by hand. The funder re-underwrites nearly all of it because the file itself gives the funder no way to trust any of it. This duplicated checking adds cost at every step.

The AgenticFunding model assigns that work to an origination agent, the AgenticFunder. The agent gathers what a case needs. It verifies facts against public registries. It chases what's missing. It collects the applicant's declarations. It assembles the result into a deal package, the framework's final output. The deal package reaches funders in a form their systems can consume and their underwriters can rely on for triage.

The agent proposes; provenance and deterministic gates dispose.

One v0 limitation applies to every claim on this page: provenance is the producer's recorded claim, not yet a proof a third party can check. The trust boundary states this in full.

The design constraint that makes agentic origination viable in regulated finance is that the agent never asks to be trusted. Every fact it hands over carries its provenance: verified, self-declared, document-backed, or honestly not-collected. The funder's own deterministic gates and human underwriting make every decision. Nothing in the framework asks anyone to act on model output.

The stack

layerrolestatus
Agent platformThe AgenticFunder: gather → verify → chase → attest → package. Works with a broker in the loop; it can run without a broker only under an authorised principal. Live — AskVouch is the working example
Output contractThe deal package: a machine-readable pack with per-fact provenance and a readiness verdict — specified by the open deal-package standard documented on this site.v0.4, published + validator-enforced
Funder sideConsumes conforming packs, applies its own gates against per-fact provenance, and spot-verifies the facts that matter. This replaces re-collection and triage; verification duties remain (see the v0 trust boundary). Open — requirement profiles shaped with pioneer funders

The Reference architecture holds the full facet map (glossary, capability, entity, process, data-dictionary and C4 views). The Platform architecture documents the component decomposition. The standard specifies the output contract. Credit teams should start at For credit teams. Implementers and funders can download the artifacts and participate.

← Ops API For credit teams →

For credit teams

what a funder receives, what it still has to do, and how to run a pilot

This page is for the people who read the file and make the decision. It states what a conforming pack gives a credit team, what the pack does not give them, and what the team still carries.

What you receive

artifactwhat it is
The deal packageA machine-readable file. Every fact carries its provenance: verified against a named source, applicant-declared, document-backed, or openly not collected. Your systems can read it without parsing a PDF.
The Pack SummaryA one-page human sheet. It shows the verdict, how much of the pack is verified, and what is still outstanding. It is the sheet an underwriter attaches to a credit paper.
A disposition channelA structured way to reply: acknowledge, request specific fields, decline with a reason code, or issue an offer. An information request feeds the producer's chase engine directly.

What the pack does not give you

  • It is not a credit decision. The standard carries no score, no ranking and no recommendation. Your gates and your underwriters decide.
  • Oven-ready does not mean verified. status answers whether every required field is present. conformance_level answers how the facts were established. Read both, and read the provenance mix on the summary sheet.
  • Provenance is a claim, not yet a proof. In v0 the producer records how each fact was established. A consumer cannot independently verify that record. Trusting a pack means trusting its producer, which is why a pack names its producer and their regulatory status. Signed evidence anchors are the roadmap item that closes this gap.

What your firm still carries

  • Customer due diligence. Screening results in a pack are informational. They do not discharge your own obligations under the Money Laundering Regulations 2017. Relying on another firm's checks requires an explicit regulation-39 arrangement.
  • Your own freshness policy. Validation is deliberately clock-free. Each verified fact carries the date it was checked. Your firm sets how old is too old.
  • Spot-verification of what matters. The pack replaces re-collection and triage. It does not replace verification of the facts your credit policy turns on.
  • Data protection. Packs carry personal data about directors and guarantors. A firm receiving a pack is a controller in its own right under UK GDPR.
  • A secure channel. The standard is transport-neutral. Agree the channel before exchanging packs that carry personal data.

Wiring your gates

A credit team consumes a pack in three passes. Pass one is mechanical: run the reference validator, or your own implementation checked against the published conformance vectors, and reject anything that does not conform. Pass two is policy: read readiness.missing, the conformance level and the provenance mix against your appetite, and return an info_requested disposition for anything you need. Pass three is underwriting, unchanged.

Running a pilot

  1. Read one pack. Take the worked example and the rendered summary. Decide whether the fields you underwrite on are present, and tell us what is missing for your product.
  2. Shape the requirement profile. Requirement profiles say what evidence a product needs before a pack may claim readiness. Profiles are published as drafts and go through a public comment window under the charter, so your input becomes part of the standard rather than a private arrangement.
  3. Receive live packs and reply with dispositions. This closes the loop and is the point at which the standard is proven in practice.

Contact: [email protected]. See also Participate and the regulatory notes.

← AgenticFunding Reference architecture →

Reference architecture

the facet map + C4 level 1 (system context) · source: docs/deal-schema/c4-context.mmd

A reference architecture is the set of views that lets any implementer build a conforming platform without reading the reference code. The same views let any funder integrate a conforming platform. Mature industry data standards use the same structure: a set of linked views (facets). Each facet answers one question. Each facet is usable alone or in combination with the others. The framework defines seven facets:

facetanswersview
Business glossarywhat the words meanGlossary
Capability modelwhat the platform must be able to do (unsequenced)Capability model
Entity modelwhat the objects are and how they relateEntity model
Data dictionarywhich facts, their types, sources and classesField catalogue · Code lists · Reference data
Product coveragewhich products require which evidence, in which modeLending coverage
Process modelhow a case moves; the disposition loopLifecycle
Architecture views (C4)who and what surrounds the system; what runs inside itcontext — this page · container — Platform architecture

The architecture views use the C4 model. Level 1 (system context) appears below and shows who and what surrounds the platform. Level 2 (container) is the Platform architecture page. Levels 3–4 (component/code) are deliberately not published: they describe one particular implementation. Any conforming implementation may occupy the platform role.

System context (C4 level 1)

PEOPLE BORROWER SME applicant (corporate for readiness claims) BROKER FCA-authorised — the agent is their ops teammate ADMIN / QC compliance oversight append-only audit THE AGENTICFUNDER PLATFORM gather · verify · chase attest · package proposes — never decides credit any conforming implementation fits here VERIFICATION SOURCES PUBLIC REGISTRIES company · regulator · LEI sanctions · VAT · CCJ · land CONSENTED BANK DATA open-banking affordability facts CAPITAL FUNDER SYSTEMS deterministic gates + human underwriting — dispose THE OPEN PROTOCOL deal package · Pack Summary disposition — the only coupling between platform and funder answers · documents (portal / email) case management · pipeline review queue · metrics verifies consented reads pack · summary disposition speaks consumes + responds in

The platform element in the diagram is deliberately generic. The protocol (the open standard) is the only coupling between an origination platform and a funder. The reference implementation demonstrates that a conforming platform can be built; it holds no privileged position in the framework.

← For credit teams Platform architecture →

Platform architecture

C4 level 2 — the container view of the reference architecture

This page describes the containers of the AgenticFunder platform. Every capability below runs in the reference implementation (AskVouch).

INPUTS OUTPUTS Borrower answers & documents Public registries company · regulator LEI · sanctions Consented bank data open banking THE AGENT — AGENTICFUNDER GATHER case checklist engine borrower portal email front-door VERIFY registry adapters deterministic document checks (local-only) CHASE due-logic scheduler templated emails reply-to-case loop ATTEST & PACKAGE declarations · truth statement readiness evaluation DEAL PACKAGE FINAL OUTPUT PDF — human underwriters JSON — funder systems (the open standard) FUNDER deterministic gates + human underwriting dispose

Every fact carries provenance. Nothing is ever fabricated.

Capability → component map

capabilitywhat it doesreference component (AskVouch)
GatherSeeds a per-case checklist from the field catalogue; collects uploads and answers from the borrower directlycase engine · borrower magic-link portal · email front-door
VerifyChecks facts against the reference-data registries; deterministic, local-only document checking — no cloud processing of borrower documentsregistry adapters (company register, regulator register) · doc-check engine
ChaseRule-timed, templated, audited follow-up on missing items; replies route back onto the case automaticallychase engine (rule-based timing for when items fall due + templated emails, never AI-generated)
AttestWarranty questionnaire + signed truth statement; the basis of the pack's attestationdeclarations module
PackageAssembles the canonical pack with per-fact provenance; evaluates readiness against the requirement profile; renders the outputspack assembler · standard exporter · PDF renderer
DeliverDelivers the pack to the funder as a human-readable PDF or as the machine-readable standard JSONPOST /broker/cases/{id}/pack?format=standard

Platform properties

  • Deterministic-first. Verdicts, gates and chase timing are pure functions; the LLM assists with conversation, never with credit decisions or verified facts.
  • Append-only audit. Every case action is an event in an append-only log; state is derived, so the system is restart-safe and fully auditable.
  • Honest absence. A fact the platform did not establish is marked not-collected. The pack never presents a missing fact as established.
  • Operating modes. Broker-in-the-loop is the current mode: the agent is the broker's ops teammate. Broker-optional operation runs only under an authorised principal. The regulatory boundary is stated explicitly (see Regulatory notes).
← Reference architecture Capability model →

Capability model

The capability model breaks the origination value chain into capabilities with no fixed order. A capability is a thing the platform must be able to do. The model is deliberately not a fixed workflow. Facilities compose these capabilities differently. Example: a term loan runs the chain once; a continuous-mode receivables facility loops gather → verify → submit → dispose for the life of the facility. Each capability names the component in the reference implementation (AskVouch) that provides it today, and the protocol artifact it produces or consumes.

capabilitywhat it doescomponent in AskVouchprotocol artifact
IdentifyResolve the applicant against public registries — number, status, officers, LEIverification adaptersverified identity facts
GatherDetermine required evidence (requirement profile) and collect it from the applicantcase checklist engine · borrower portal · email front-doordeclared + document-backed fields
VerifyCheck facts against named sources; deterministic document checksregistry adapters · local-only doc checkingverified provenance
ChaseSchedule and send reminders for gaps; route replies back to the casechase enginechase items driven by missing[] and by funder info_requested
AssembleBuild the pack; stamp per-fact provenance; never fabricate (not_collected)pack assembler + standard exporterthe conforming pack
AttestCapture declarations and the attestation (who, in what capacity, when)declarations flowattestation object
SubmitHand the pack and its one-page summary to the funderpack endpoint (?format=standard) · PDF renderingpack + Pack Summary
Dispose (funder-side)Deterministic gates + human underwriting respondthe funder's own systemsdisposition message
Monitor / renewContinuous facilities re-evaluate readiness on a cycleroadmap — borrowing-base cyclerepeated packs + dispositions

Platform architecture covers how the agent-side capabilities are wired. Lending coverage covers which profile selects which evidence.

← Platform architecture Overview →

The deal-package standard

Standard lending-deal-package-readiness · schema https://askvouch.com/schemas/deal-package-readiness/v0.5.0/deal-package.schema.json · draft v0.4

The deal package is the final output of the AgenticFunding framework — the artifact the agent delivers to funders. This section specifies it as an open, machine-readable standard: what a funding case contains, where each fact came from (provenance), and whether the pack is ready to submit (a readiness verdict with conformance levels). It complements open-data initiatives on the submission side by defining shared readiness in addition to shared data.

What is normative

  • The JSON Schemas (deal-package.schema.json — the pack shape; deal-package.strict.schema.json — a generated companion that enumerates the full vocabulary, for consumers who can only run plain JSON Schema).
  • The disposition message (disposition.schema.json), which is the funder's machine-readable response, and the borrowing-base certificate (continuous mode).
  • The conformance vectors (conformance-vectors.v0.json) — 30 published test cases any implementation can run.
  • The field catalogue / data dictionary (field-catalogue.v0.json) — which fields may appear: datatype, definition, tag, source, data class, and the baseline requirement profile.
  • The code lists (code-lists.v0.json) — versioned enumerations; enum-valued fields must carry a listed code.
  • The requirement profiles (requirement-profiles.v0.json) — per-product required evidence + readiness mode, selected by the_ask.facility_type.
  • The reference-data registry (reference-data.v0.json) — the external registries verified facts cite.
  • The readiness rules (readiness & conformance) — enforced by the reference validator.

Everything else on this site is explanatory. Terminology follows RFC-2119-style usage (MUST / SHOULD / MAY) where capitalised.

Status & licences

  • Draft v0.4. Working name; final naming is pending clearance.
  • Schema and code: Apache-2.0. Specification prose: CC-BY-4.0. Upstream attributions in NOTICE.
  • Source of truth: docs/deal-schema/ in the AskVouch repository (schema, catalogue, validator, fixtures, crosswalks, governance files).
Nothing on this site is legal or regulatory advice.
← Capability model Lending coverage →

Lending coverage

facility_type: 16 products · profiles_version 0.7.0

The standard covers the full range of debt products through three mechanisms: the facility_type taxonomy (the product classification; use_of_funds classifies purpose), per-product requirement profiles (what evidence each product needs before a pack may claim oven-ready), and product-specific catalogue sections (receivables for invoice finance/factoring/ABL, capital_structure for mezzanine, development for development finance, trade_finance for import/export facilities, card_receipts for merchant cash advances).

The status column records each product's maturity: v0 = profiled and stable; draft = profiled, published as a draft and open for comment under the charter; taxonomy-only = named in the product list, but its evidence checklist is not written yet. Packs for it fall back to the baseline requirements. The taxonomy-only status records this gap explicitly.

facility typeproductrequirement profilereadiness modestatus
term_loanTerm loan (secured or unsecured) term-loan-v0one_shotv0
revolving_credit_facilityRevolving credit facility (RCF) term-loan-v0one_shotv0
overdraftBusiness overdraft term-loan-v0one_shotv0
asset_finance_hpAsset finance — hire purchase asset-finance-v0one_shotv0
asset_finance_leaseAsset finance — finance/operating lease asset-finance-v0one_shotv0
invoice_discountingInvoice discounting (confidential or disclosed) invoice-finance-v0continuousdraft
factoringFactoring (credit control outsourced) invoice-finance-v0continuousdraft
asset_based_lendingAsset-based lending (revolving, multi-asset borrowing base) asset-based-lending-v0continuous
trade_financeTrade finance (import/export, letters of credit) trade-finance-v0continuousdraft
bridgingBridging finance (short-term, exit-led) bridging-v0one_shotdraft
development_financeProperty development finance (staged drawdown) development-finance-v0one_shotdraft
mezzanine_subordinatedMezzanine / subordinated debt mezzanine-v0one_shotdraft
merchant_cash_advanceMerchant cash advance (receipts-linked) merchant-cash-advance-v0one_shotdraft
sale_and_leasebackSale and leaseback asset-finance-v0one_shotv0
otherOther (describe in the_ask.purpose) baseline-v0 (fallback)one_shottaxonomy-only
inventory_financeInventory / stock finance inventory-finance-v0continuous

Profile selection

The pack's the_ask.facility_type value selects the profile whose applies_to contains it; packs without a facility type use baseline-v0 (the catalogue's required_fields). The reference validator enforces this selection. Example: an invoice-finance pack cannot claim oven-ready without its debtor book, and a mezzanine pack cannot claim it without the capital stack.

One-shot vs continuous readiness

Term products are underwritten one-shot: the pack is submitted once. Receivables-backed revolving products (readiness_mode: continuous) use this pack for onboarding, then operate on recurring borrowing-base certificates. The latest certificate is carried in the pack as receivables.borrowing_base_certificate. The recurring certificate message is standardised in borrowing-base-certificate.schema.json (v0.1.0). The validator enforces the certificate's arithmetic: eligible ≤ gross, and availability ≤ eligible × advance rate. Trade finance is also continuous: the facility is underwritten once, then per-transaction documents (trade_finance.shipping_documents) recur over its life.

Profile reference

This section lists every profile in full: the required evidence, with catalogue labels. The listing is generated from requirement-profiles.v0.json + the field catalogue.

baseline-v0

applies to: — (fallback) · mode one_shot · status v0

The default profile — identical to the catalogue's required_fields. Applies when no facility_type is stated.
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
financials.statutory_accountsLast filed statutory accounts (PDF)doc
banking.bank_statementsLast 6 months' business bank statementsdoc
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare

term-loan-v0

applies to: term_loan revolving_credit_facility overdraft · mode one_shot · status v0

Core term/revolving cash facilities. Baseline + security position. (An RCF is operationally revolving but underwritten one-shot at this evidence level.)
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
financials.statutory_accountsLast filed statutory accounts (PDF)doc
banking.bank_statementsLast 6 months' business bank statementsdoc
security_assets.security_offeredSecurity offered (unsecured / secured / asset)declare
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare

asset-finance-v0

applies to: asset_finance_hp asset_finance_lease sale_and_leaseback · mode one_shot · status v0

Asset-secured products: the asset schedule is the credit.
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
financials.statutory_accountsLast filed statutory accounts (PDF)doc
banking.bank_statementsLast 6 months' business bank statementsdoc
security_assets.asset_scheduleAsset schedule (asset finance)declare
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare

invoice-finance-v0

applies to: invoice_discounting factoring · mode continuous · status draft

Receivables-backed revolving facilities. Onboarding pack = baseline + the debtor book. ONGOING lending runs on borrowing-base certificates — receivables.borrowing_base_certificate carries the latest; the periodic certificate MESSAGE is standardised in borrowing-base-certificate.schema.json (validate_bbc enforces the arithmetic).
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
financials.statutory_accountsLast filed statutory accounts (PDF)doc
banking.bank_statementsLast 6 months' business bank statementsdoc
receivables.aged_debtor_ledgerAged receivables ledgerdoc
receivables.debtor_concentrationTop-debtor concentrationdeclare
receivables.sample_invoicesSample invoices + delivery evidencedoc
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare

development-finance-v0

applies to: development_finance · mode one_shot · status draft

Development finance: scheme economics, consent evidence, and a stated exit. Bridging now has its own exit-led profile (bridging-v0).
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
security_assets.property_addressProperty address (if secured on property)declare
security_assets.valuation_reportProperty valuation (RICS report)doc
development.gdvGross development value (GDV)declare
development.total_build_costsTotal build costs (incl. contingency)declare
development.drawdown_scheduleStaged drawdown scheduledoc
development.planning_permissionPlanning permission evidencedoc
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare
development.development_appraisalDevelopment appraisaldoc
the_ask.exit_strategyExit strategydeclare

mezzanine-v0

applies to: mezzanine_subordinated · mode one_shot · status draft

Subordinated debt is priced off the whole capital stack — the stack is required evidence.
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
financials.statutory_accountsLast filed statutory accounts (PDF)doc
capital_structure.existing_debt_scheduleExisting debt scheduledeclare
capital_structure.senior_facility_termsSenior facility agreement / term sheetdoc
capital_structure.ebitdaEBITDA (trailing 12 months)declare
capital_structure.enterprise_valuationEnterprise valuationdoc
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare

bridging-v0

applies to: bridging · mode one_shot · status draft

Bridging is exit-led: the security and the exit ARE the credit. Trading affordability evidence is secondary, so statutory accounts are not baseline-required here — the stated exit plus supporting evidence is.
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
security_assets.property_addressProperty address (if secured on property)declare
security_assets.valuation_reportProperty valuation (RICS report)doc
the_ask.exit_strategyExit strategydeclare
the_ask.exit_evidenceExit evidencedoc
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare

trade-finance-v0

applies to: trade_finance · mode continuous · status draft

Transaction-cycle finance: the facility is underwritten once, then each funded transaction recurs (continuous mode). Facility readiness requires the trade shape and confirmed demand; per-transaction shipping/title documents recur after readiness and are deliberately NOT required here.
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
financials.statutory_accountsLast filed statutory accounts (PDF)doc
banking.bank_statementsLast 6 months' business bank statementsdoc
trade_finance.trade_directionTrade directiondeclare
trade_finance.supplier_detailsKey supplier detailsdeclare
trade_finance.purchase_ordersConfirmed purchase ordersdoc
trade_finance.trade_cycle_daysTrade cycle (days)declare
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare

merchant-cash-advance-v0

applies to: merchant_cash_advance · mode one_shot · status draft

Receipts-linked advance: acquirer statements are the primary evidence — the advance is sized and repaid from card takings, not filed accounts.
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
banking.bank_statementsLast 6 months' business bank statementsdoc
card_receipts.acquirer_nameCard acquirerdeclare
card_receipts.acquirer_statementsAcquirer statementsdoc
card_receipts.monthly_card_turnoverAverage monthly card turnoverdeclare
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare

asset-based-lending-v0

applies to: asset_based_lending · mode continuous · status

ABL lends against MORE THAN ONE asset class. The borrowing base carries a receivables line and an inventory line, each with its own advance rate.
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
financials.statutory_accountsLast filed statutory accounts (PDF)doc
banking.bank_statementsLast 6 months' business bank statementsdoc
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare
receivables.aged_debtor_ledgerAged receivables ledgerdoc
receivables.debtor_concentrationTop-debtor concentrationdeclare
inventory.stock_on_hand_valueStock on hand (value at cost)verify
inventory.stock_count_dateStock count dateverify
inventory.nolv_rateNet orderly liquidation value (NOLV) ratedeclare
inventory.stock_locationsStock locationsdeclare
inventory.stock_insuranceStock insureddeclare

inventory-finance-v0

applies to: inventory_finance · mode continuous · status

Stock finance. Advance rates are ordinarily struck against appraised NOLV, and enforceability turns on where the stock sits — hence the waiver of lien.
required fieldlabeltag
business_identity.company_nameRegistered company nameverify
business_identity.company_numberCompany numberverify
business_identity.legal_formLegal form (ltd / llp / plc / partnership / sole trader / other — readiness claims are corporate-only in v0, see entity_gate_note; Companies House verifies registered entities only)verify
financials.statutory_accountsLast filed statutory accounts (PDF)doc
banking.bank_statementsLast 6 months' business bank statementsdoc
the_ask.amountAmount requesteddeclare
the_ask.purposeWhat the money is fordeclare
declarations.truth_statementTruth statement signeddeclare
inventory.stock_on_hand_valueStock on hand (value at cost)verify
inventory.stock_count_dateStock count dateverify
inventory.stock_valuation_basisStock valuation basisdeclare
inventory.nolv_rateNet orderly liquidation value (NOLV) ratedeclare
inventory.stock_appraisalStock appraisal / NOLV reportdoc
inventory.stock_locationsStock locationsdeclare
inventory.stock_insuranceStock insureddeclare
← Overview Terminology & conformance →

Terminology & conformance

pack
A single JSON document conforming to the schema: one funding case at a point in time.
field
A named fact inside a section: { value, provenance }.
provenance
The record of how a fact entered the pack. See Provenance.
readiness
The producer's claim that the pack is ready to submit. The validator checks that this claim is coherent.
producer
A system that assembles and emits packs (e.g. a broker platform or origination agent).
consumer
A system that receives packs (typically a funder) and applies its own gates.

Conformance

  • A conforming pack validates against the JSON Schema, the catalogue (membership, tag/provenance compatibility, source matching), and the readiness rules. The reference validator implements all three: schema/validate.py.
  • A conforming producer emits conforming packs and never fabricates a fact. A value the producer did not establish MUST be emitted as not_collected.
  • Accept means parse and process as a valid pack. It never obliges a funder to approve or fund. A conforming consumer MUST accept any pack whose schema_version shares its major version, and SHOULD apply its own freshness policy over provenance.date.

Versioning

The standard is versioned on two semver axes: schema_version (pack shape + rules) and catalogue_version (the field catalogue). This release carries schema 0.5.0 and catalogue 0.15.0. Both versions are REQUIRED inside every pack. Breaking changes are major-version only. Changelog:

  • catalogue 0.15.0 / vectors 0.9.0 — development finance monitoring: certified work in place, cost to complete, drawn to date, programme variance (signed — a scheme running early must not read as late) and cost variance. A development facility draws down against the monitoring surveyor's certificate, which is the same event as a proof of delivery, so it reuses the existing evidence model.
  • catalogue 0.14.0 / reference-data 0.8.0 — card receipts (0/6 → 6/12 verified): takings measured at the acquirer, a derived average ticket, and the refund and chargeback rate — the card-trade analogue of dilution, which the standard did not ask for anywhere before. Pending settlements are proof of forward receipt, and the payer is the acquirer rather than a debtor who can dispute. Plus an outstanding-charges count from the Companies House charges register.
  • catalogue 0.13.0 / profiles 0.7.0 — construction: certified payment applications and retentions. Two assets of two different archetypes — a certified application proves performance, while retention is money contractually due later, conditional on practical completion and then the defects period. Recording retention as certain money would overstate the asset.
  • catalogue 0.12.0 / profiles 0.6.0 — industry verticals, modelled as overlays. Recruitment invoice finance is ordinary invoice discounting where the borrower is a staffing agency: the facility does not change, what changes is what can be proven. A new the_ask.performance_evidence_basis selects the overlay; haulage was retro-fitted the same way. Also: a field may now name more than one source, because dilution and debtor days are the same fact whether a transport system or a staffing system measured them.
  • vectors 0.5.0 — conformance vectors now carry error_code, the stable machine identifier to assert on. Message prose is explicitly not contractual: an implementer in another language could never match English text, and rewording a message broke consumers. Published alongside a property suite — six invariants a conforming validator must satisfy over a generated document space, not a finite example list.
  • catalogue 0.11.0 / code-lists 0.7.0 — inventory as an asset class, and the systems that move the goods: a 14-field stock section, four proof-of-delivery counterparts in receivables, asset-based-lending and inventory-finance profiles, and an inventory line on the borrowing-base certificate. Before this the entire risk basis of invoice finance was self-declared or a PDF.
  • catalogue 0.9.0 / profiles 0.4.0 — sharia checklists completed: every named structure carries its evidence checklist (partnership, agency and forward structures included); only other has no fixed checklist. Status labels rewritten in plain words.
  • catalogue 0.8.0 / code-lists 0.5.0 / profiles 0.3.0 — opt-in sharia-compliant structuring: the finance_basis switch, the sharia_compliance section, the sector gate, per-structure evidence via the profiles overlay, and the S1/S2/S3 ladder. Additive; conventional packs unchanged.
  • schema 0.4.0 / catalogue 0.7.0 — the audit fix pass (fixes found by an audit): datatype enforcement (ratio = a 0–1 decimal fraction — 0.7, never 70; coverage multiples use decimal); the generated strict schema; canonical instance grammar (no leading zeros in instance numbers, and the bare unnumbered instance must come first); catalogue_version required; disposition hardened (v0.2.0); artifact cross-validation in CI.
  • catalogue 0.6.0 / profiles 0.2.0 — the exhaustive-depth pass (every section filled out in full detail): 13 sections, 148 fields; new trade_finance + card_receipts sections; every section deepened with enough detail to implement against (VAT / CCJ-register / title-number verification, exit strategy + evidence, borrowing-base certificate, HMRC arrears, group structure, planning & build evidence); profiles for bridging, trade finance and merchant cash advance — only other remains unprofiled.
  • schema 0.3.0 / catalogue 0.5.0 — repeating groups (party/asset sections may appear as guarantor:2, guarantor:3, … instances with per-instance provenance; the change is additive and previously-valid packs stay valid); the disposition message (the funder's machine-readable response + decline-reason codes); the normative Pack Summary sheet.
  • catalogue 0.4.0 — debt-spectrum coverage (Std-10): the facility_type taxonomy (15 products), per-product requirement profiles (requirement-profiles.v0.json, incl. continuous readiness mode for receivables facilities), and three new evidence sections — receivables, capital_structure, development (11 sections, 71 fields).
  • catalogue 0.3.0 — the data-dictionary upgrade: datatype + definition on every field; code-list bindings; the code-lists and reference-data artifacts; the x_ extension namespace (schema_version unchanged at 0.2.0 — additive).
  • 0.2.0 — provenance aligned with producer output (date/label); structured values; attestation object; entity gate; baseline requirement profile; guarantor / lei / dscr in the catalogue. Hardened after an adversarial review (2026-07-15).
  • 0.1.0 — initial extraction from the AskVouch dealpack producer.
← Lending coverage Pack structure →

Pack structure

A pack is a single JSON object with six top-level members:

membertypereq.meaning
standardconst●"lending-deal-package-readiness"
schema_versionsemver string●Pack-shape version (this release: 0.5.0)
catalogue_versionsemver string●Field-catalogue version the pack was assembled against (required since v0.4)
entityobject●{ legal_form, jurisdiction } — see the entity gate under Readiness
sectionsobject●{ section_id → { field_id → field } }
producerobjectWho assembled the pack — see Producer identity (recommended)
readinessobject●The readiness verdict — see Readiness

The field object

{ "value": string | number | boolean | null | array | object,
  "provenance": { "kind": "verified" | "self-declared" | "document" | "not_collected", ... } }

A value of null means not provided. The field catalogue governs which section_id.field_id pairs are legal. The reference validator enforces this rule; the JSON Schema document does not. This split is deliberate: the catalogue can be versioned on its own.

Producer identity (v0.5)

The producer block records who assembled the pack. It is optional and recommended. In v0 provenance is the producer's recorded claim rather than a proof a consumer can check independently, so trusting a pack means trusting its producer. A consumer needs to know whose claim it is.

"producer": {
  "name": "Example Origination Ltd",
  "role": "origination platform",
  "fca_status": "appointed_representative",   // authorised | appointed_representative
                                              //   | unregulated | not_applicable | not_stated
  "fca_frn": "000000",                        // checkable on the FCA Register
  "principal_name": "Example Principal Ltd",  // required for an appointed representative
  "contact": "[email protected]" }

The validator enforces three rules when the block is present. The block must name the producer. An appointed representative must name its principal, because FSMA s.39 places regulatory responsibility on the principal. An authorised producer or appointed representative should carry its Firm Reference Number, so a consumer can check the FCA Register entry.

Repeating groups (v0.3)

A repeating group is a section that may appear as multiple instances in one pack. The catalogue marks three sections repeatable: true: people, guarantor, and security_assets. Further instances carry the suffix :2, :3, … The first instance uses the bare id:

"sections": {
  "guarantor":   { "guarantor_name": { "value": "A. Director", ... } },
  "guarantor:2": { "guarantor_name": { "value": "B. Director", ... } }
}

Each instance carries its own fields with their own per-fact provenance. Example: a two-guarantor deal where one guarantor's ID is verified and the other's is outstanding is representable. readiness.missing entries may be instance-qualified (guarantor:2.guarantor_id). Instances of non-repeatable sections are rejected by the reference validator. Instance ids follow strict rules: no leading-zero suffixes (guarantor:02 is rejected), an instance requires the bare first instance, and missing may only cite instances present in the pack.

Minimal skeleton

{
  "standard": "lending-deal-package-readiness",
  "schema_version": "0.5.0",
  "catalogue_version": "0.15.0",
  "entity": { "legal_form": "ltd", "jurisdiction": "GB" },
  "sections": { "the_ask": { "amount": { "value": 75000,
      "provenance": { "kind": "self-declared" } } } },
  "readiness": { "status": "gaps-remaining", "attested": false,
      "conformance_level": "L1-declared",
      "missing": ["business_identity.company_name", "..."] }
}

Namespaces

The standard defines three namespaces that keep it extensible without forking. Insurance data standards already use this pattern:

  • Core — every field in the catalogue. Portable across producers and consumers.
  • Jurisdiction — profiles will localise sources and requirements without changing the shape (UK-first today; a US profile swaps companies_house for state registries). Planned, not yet specified.
  • Extension — a producer MAY carry additional fields prefixed x_ (e.g. x_internal_score). Extension fields must still be {value, provenance}-shaped; the validator accepts them, but they do not count towards catalogue membership or conformance scoring. Un-prefixed unknown fields are rejected.
← Terminology & conformance Disposition messages →

Disposition messages

disposition.schema.json · v0.2.0 · companion to the pack standard

The framework's thesis is "the agent proposes; provenance and deterministic gates dispose." A disposition is the funder's response to a submitted pack. The pack standardises the proposal; the disposition standardises the funder's response. Every funder responds in the same shape. An information request can drive the producer's chase engine directly, with no retyping from an email.

The message

{ "standard": "lending-deal-package-readiness/disposition",
  "disposition_version": "0.2.0",
  "pack_ref": "sha256:…",              // which pack version is being disposed
  "status": "info_requested",           // received | in_review | info_requested
                                        //   | declined | offer_issued
  "info_requested": { "field_ids": ["financials.statutory_accounts",
                                    "guarantor:2.guarantor_id"] },
  "actor": "gate:baseline-checks",      // or a named underwriter + capacity
  "timestamp": "2026-07-18T09:00:00Z" }
  • pack_ref — pack identity. A pack MUST be transmitted in its canonical serialization (keys sorted, compact separators, UTF-8 — validate.canonical_json). pack_ref is sha256: + the hex SHA-256 of those bytes (validate.pack_ref). Because transmission is canonical, a hash of the received bytes and an independently computed hash agree. A re-serialized pack is a different identity.
  • info_requested.field_ids — catalogue field ids, instance-qualified where needed; REQUIRED when status is info_requested. Each id becomes a chase item mechanically.
  • declined.reason_code — REQUIRED when status is declined; codes from code list decline_reason so a decline is actionable and auditable rather than free text.
  • actor — a system name when a deterministic gate disposed; a named underwriter + capacity when a human did. The value records which kind of actor disposed.
  • offer_issued carries no terms. Pricing and terms are a non-goal; they travel in the funder's own documents.

Rules

  • A disposition references exactly one pack version (pack_ref).
  • Statuses define no mandatory workflow order. Any order is legal; consumers MUST NOT assume a fixed sequence. continuous-mode facilities expect repeated dispositions over the facility's life.
  • field_ids MUST reference catalogue fields — enforced by validate.validate_disposition(msg, catalogue).
  • A disposition is the funder's operational statement, not a regulatory decision notice; where regulated-lending notice obligations apply they are the funder's own and travel separately.
  • Transport is deliberately out of scope for v0. Packs, summaries, certificates and dispositions are transport-neutral documents; how they travel (endpoints, webhooks, auth) is between the parties. Transport neutrality does not waive security obligations: parties MUST agree a secure channel before exchanging packs that carry personal data. A minimal HTTP binding is a named roadmap item.

The exchange (sequence)

PRODUCER FUNDER pack + Pack Summary (pack_ref = sha256 of transmitted bytes) disposition: received (pack_ref) disposition: in_review disposition: info_requested { field_ids[] } each field_id → a chase item → borrower evidence updated pack (NEW pack_ref — new bytes, new identity) disposition: offer_issued — or declined { reason_code } continuous-mode facilities only ↓ borrowing-base certificate (period · availability) recurring disposition — for the life of the facility

Source: exchange.mmd · the certificate message: borrowing-base-certificate.schema.json (arithmetic enforced: eligible ≤ gross; availability ≤ eligible × advance rate).

← Pack structure Sharia-compliant structuring →

Sharia-compliant structuring

opt-in overlay · catalogue v0.15.0 · spec: spec/sharia-structuring.md

The framework supports sharia-compliant deals through one field: the_ask.finance_basis. The default is conventional: the deal is checked like any other. Setting it to sharia_compliant adds a further set of sharia compliance checks and required evidence, for that deal only. These additions are called the overlay, and this page lists them. Both kinds of deal use the same pack format and can run side by side. A funder can require the setting or ignore it. The setting adds checks and never removes any, so there is no separate Islamic version of the standard.

The checks focus on the structure of the deal, because that is what sharia compliance depends on. Example: in a cost-plus sale (murabaha), the funder must buy the asset first and then sell it to the customer. If the funder pays the money straight to the customer instead, the deal is an interest loan with a different name, and a certificate cannot fix that. The standard therefore records two things: evidence of how the deal was built, and who certified the product. The standard does not judge religious questions. Scholars disagree on some structures. The pack records the structure used and the board that approved it; the funder's own board decides whether to accept it.

The five layers

  1. Sector gate — deterministic. A pack whose verified SIC codes match the sharia_excluded_sic prefixes (alcohol, gambling, tobacco, weapons, interest-based finance, …) cannot carry the switch. This is a minimum check, not the whole test.
  2. Per-structure evidence. The chosen sharia_structure selects its evidence set (below) — the way facility_type selects a requirement profile.
  3. The sequence rule. ownership_transfer_date must not follow sale_contract_date: the funder must own before it sells. The validator checks that the recorded dates are in that order.
  4. Prohibition terms as evidence. The late-payment-charity clause (late amounts route to charity, never to income) is required for any sharia-compliant readiness claim.
  5. Certification of the template, conformity of the deal. Boards certify the product template; the pack records who certified, the certificate and its review date — while layers 1–4 evidence that this deal actually followed it. A readiness claim needs both the structure evidence (layers 1-4) and the certification record (layer 5); neither substitutes for the other.

Structure evidence requirements

structuremeaningrequired evidence (beyond the base overlay)
murabahaMurabaha (cost-plus sale — funder buys, owns, sells at disclosed cost + markup) disclosed_cost · disclosed_markup · ownership_transfer_evidence · ownership_transfer_date · sale_contract · sale_contract_date
tawarruqTawarruq / commodity murabaha (monetisation via commodity purchase and sale) disclosed_cost · disclosed_markup · ownership_transfer_evidence · ownership_transfer_date · sale_contract · sale_contract_date
ijaraIjara (lease — funder owns and insures the asset) ownership_transfer_evidence · sale_contract · funder_insurance_evidence
ijara_muntahia_bittamleekIjara muntahia bittamleek (lease ending in ownership) ownership_transfer_evidence · sale_contract · funder_insurance_evidence · buyout_schedule
diminishing_musharakaDiminishing musharaka (co-ownership + progressive buyout + rent on the funder's share) co_ownership_agreement · buyout_schedule
musharakaMusharaka (profit-and-loss-sharing partnership) partnership_agreement · capital_contribution_funder · capital_contribution_customer · profit_sharing_ratio · loss_follows_capital
mudarabaMudaraba (investor capital + manager expertise, shared profit) partnership_agreement · capital_contribution_funder · profit_sharing_ratio · loss_follows_capital
wakalaWakala (agency — agent invests/collects for a fee) agency_agreement · agency_fee
istisnaIstisna (commissioned manufacture / construction) sale_contract · specification_delivery_schedule · disclosed_cost
salamSalam (forward purchase, price paid up front) sale_contract · specification_delivery_schedule · advance_payment_evidence
otherOther (describe; certification names the structure) no fixed checklist — the board's certificate defines what this structure must evidence

Base overlay (every sharia-compliant deal): the structure itself + the late-payment-charity clause — on top of whichever facility profile applies. Generated from requirement-profiles.v0.json.

The S-ladder

levelmeans
S1-declaredStructure stated by the applicant
S2-structure-evidencedSector gate passed + all structure evidence provided + sequence checks pass
S3-certifiedS2 + the certificate, the named certifying board, and the review date provided

Claimed via sharia_compliance.claimed_level; the validator checks the claim against the evidence, the same way it checks L1/L2/L3. Worked example: example-pack.sharia.json (murabaha at S2 — disclosed cost + markup, dated ownership-before-sale, honest gaps), plus sector-gate and sequence negatives in the conformance vectors.

← Disposition messages Lifecycle →

Lifecycle

the process view — pack readiness states + disposition states · source: docs/deal-schema/lifecycle.mmd

This page describes the lifecycle of a case from first collection to funder disposition. The left lane shows the producer's ordered readiness states. The validator's deterministic gates guard each transition. The right lane shows the funder's disposition states. Two loops close the system. The first loop is the information request, which feeds the chase engine automatically. The second loop is monitoring: continuous-mode facilities cycle through recurring certificates for the life of the facility.

PRODUCER — THE AGENT PROPOSES FUNDER — GATES + HUMANS DISPOSE COLLECTING gaps-remaining · L1-declared VERIFYING registry checks · L2-verified-core OVEN-READY profile required fields · entity gate ATTESTED truth statement + attestation · L3 SUBMITTED pack_ref minted (content hash) RECEIVED acknowledgment disposition IN REVIEW funder gates read per-fact provenance INFO REQUESTED field_ids[] · instance-qualified DECLINED — terminal decline_reason code · auditable OFFER ISSUED terms travel outside the standard MONITORING continuous mode · certificate cycle pack each field_id becomes a chase item — back to COLLECTING continuous only recurring disposition
  • Every producer transition is validator-gated. L2 requires verified facts and no self-declared verify-fields. The oven-ready state requires the profile's required fields and the entity gate. L3 requires the attestation with substance.
  • The disposition sequence is not fixed. A funder may go straight from RECEIVED to DECLINED. Consumers MUST NOT assume the full sequence (spec/disposition.md).
  • The two loops complete the lifecycle. An info-request closes the gathering loop by feeding the chase engine automatically. The monitoring cycle is the process-view form of readiness_mode: continuous. The recurring borrowing-base certificate is its evidence artifact.
← Sharia-compliant structuring The Pack Summary sheet →

The Pack Summary sheet

normative content · advisory layout · companion to the pack standard

The Pack Summary is the one-page human rendering of the machine-readable pack. The pack itself is the contract. The summary is the sheet that circulates: a broker forwards it, and an underwriter attaches it to a credit paper.

Required content

  1. Identity — applicant name, company number, legal form, jurisdiction; the entity-gate statement when the pack claims readiness (corporate-only, v0).
  2. The ask — amount, purpose, facility type (label, not code).
  3. The verdict — readiness status, conformance level (L1/L2/L3), and the requirement profile that was applied.
  4. The provenance mix — per section, each repeatable instance shown separately: counts of verified / self-declared / document-backed / not-collected facts. The mix is the sheet's core content. The reader sees how much of the pack is verified before reading any value.
  5. The missing list — every readiness.missing entry with its field label, instance-qualified where applicable.
  6. Attestation — attested or not; when attested: who (name + capacity) and when.
  7. Standard + versions — standard name, schema_version, catalogue_version, and the pack content hash where computed (the natural pack_ref for dispositions).
  8. The reliance disclaimer — an attestation does not move legal responsibility to a receiving firm, and does not remove that firm's own duty to check; screening results are for information only.

A Pack Summary MUST NOT add facts that are not in the pack, rank or recommend lenders, or state provenance more strongly than the pack records it.

Layout (advisory)

The advisory layout is a single page. The verdict and provenance mix sit at the top of the page. The missing list follows. The attestation and the disclaimer sit at the foot. Producers may build a reference rendering. Conformance applies to the sheet's content, not to its styling.

Reference rendering

This is the sheet rendered from example-pack.ready.json. Every value comes from the pack. Nothing is added.

Pack Summary
Example Trading Ltd (synthetic)
Company 00000000 · ltd · GB
oven-ready
L3-attested
The ask
£75,000
new fit-out and equipment
Requirement profile
baseline-v0
the evidence set applied to this pack
Verified share
44%
12 of 27 facts checked against a named source
Oven-ready means every required field is present. It does not mean the facts are verified, and it does not mean the deal is approved. The mix below shows how much of this pack is verified. The funder decides.

Provenance mix

section verifieddeclareddocumentnot collected
Business identity41—1
Financials111—
Banking2—1—
People3———
Guarantor & personal financials151—
The ask13——
Declarations—1——

Outstanding (readiness.missing)

  • None. Every required field is provided.

Attestation

Attested by A. Director, director of the applicant on 2026-07-13.

Provenance of this sheet

Standard lending-deal-package-readiness · schema 0.5.0 · catalogue 0.11.0 · assembled by Example Origination Ltd (FCA: appointed_representative, FRN 000000).

An attestation is the packing party's statement. It does not move legal responsibility to a receiving firm, and it does not remove that firm's own duty to check. Screening results are for information only. In v0 provenance is the producer's recorded claim, not a proof a third party can check.

The same renderer applied to a pack with outstanding items (example-pack.mid.json):

Pack Summary
Midway Trading Ltd
Company 01234567 · ltd · GB
gaps-remaining
L2-verified-core
The ask
£120,000
premises expansion
Requirement profile
baseline-v0
the evidence set applied to this pack
Verified share
38%
3 of 8 facts checked against a named source
Oven-ready means every required field is present. It does not mean the facts are verified, and it does not mean the deal is approved. The mix below shows how much of this pack is verified. The funder decides.

Provenance mix

section verifieddeclareddocumentnot collected
Business identity3———
Financials——1—
Banking———1
The ask—2——
Declarations—1——

Outstanding (readiness.missing)

  • banking.bank_statements — Last 6 months' business bank statements

Attestation

Attested by A. Director, Midway Trading Ltd on 2026-07-15.

Provenance of this sheet

Standard lending-deal-package-readiness · schema 0.5.0 · catalogue 0.11.0.

An attestation is the packing party's statement. It does not move legal responsibility to a receiving firm, and it does not remove that firm's own duty to check. Screening results are for information only. In v0 provenance is the producer's recorded claim, not a proof a third party can check.

← Lifecycle Glossary →

Glossary

This glossary defines the standard's concepts for readers new to it. Per-field definitions live in the field catalogue (every field carries a datatype and a definition); this page defines the concepts that the fields build on.

termmeaning
deal package (pack)The machine-readable representation of a funding case: sections of facts, each fact carrying value + provenance, plus a readiness verdict.
provenanceHow a fact entered the pack: verified (checked against a named source), self-declared (applicant-stated), document (backed by an upload), or not_collected (the honest absence marker — never fabricated).
readiness verdictThe producer's claim about whether the pack is ready to submit: oven-ready (no required gaps) or gaps-remaining (with the gaps listed in missing). Checked for coherence by the validator.
conformance ladderL1-declared (applicant-stated) → L2-verified-core (no self-declared values on verify-tagged fields, ≥1 verified fact) → L3-attested (L2 + attested + oven-ready).
attestationThe packing party's signed statement that the pack is true. The attestation records who signed (name + capacity) and when. It does not transfer legal responsibility to the receiver.
entity gateThe rule that readiness claims (oven-ready / attested / L2+) require a corporate applicant (ltd/llp/plc) in v0. This safeguard keeps v0 outside regulated consumer credit.
requirement profileThe per-product list of required evidence, selected by the_ask.facility_type. Example: an invoice-finance pack requires the debtor book; a mezzanine pack requires the capital stack. The baseline profile applies when no facility type is set.
readiness modeone_shot — the pack is assembled once for a decision; continuous — receivables-style facilities where readiness is re-evaluated on a cycle for the facility's life.
repeating group / instanceA repeatable section that appears multiple times: guarantor, guarantor:2, and so on. Each instance carries its own per-fact provenance.
dispositionThe funder's machine-readable response to a pack: received / in_review / info_requested / declined / offer_issued. See Disposition messages.
Pack SummaryThe normative one-page human rendering of a pack. See the Pack Summary sheet.
extension fieldA producer-specific field prefixed x_ — shape-checked, ignored by conformance scoring.
personal guaranteeA director's (or third party's) personal promise to repay if the company cannot. This promise is the reason the guarantor section carries personal-data fields and the ILA marker.
independent legal advice (ILA)Advice a guarantor takes from their own solicitor before guaranteeing. The pack evidences it through guarantor.ila_confirmation. ILA is especially important where a guarantee involves a home.
debentureA charge over a company's assets generally (fixed and floating) securing a facility — visible in the pack via the charges register.
borrowing baseThe lending limit of a revolving facility, set by its collateral (e.g. a percentage of eligible receivables). The borrowing base is re-certified on a cycle and is the basis of continuous readiness (certificate profile: roadmap).
oven-readyThe readiness status meaning every required field for the applicable profile is provided: nothing the funder needs to start is missing. It does not mean the facts are verified (that is the conformance level) and it does not mean the deal is approved (that is the funder's decision).
finance basisThe per-deal opt-in switch: conventional (default) or sharia-compliant. The sharia-compliant basis activates the sharia overlay (sector gate, structure evidence, and the S-ladder — the sharia conformance ladder).
murabahaCost-plus sale: the funder buys the asset, owns it, then sells it on at a disclosed cost + disclosed markup with deferred payment. Following the steps in this order is what makes the sale compliant.
ijaraLease-based finance: the funder owns and insures the asset and leases it — ownership risk stays with the funder.
diminishing musharakaCo-ownership with a progressive buyout: the customer acquires the funder's share over time, paying rent on the remainder.
← The Pack Summary sheet Entity model →

Entity model

explanatory, not normative: the JSON pack instance and the reference validator remain normative · source: docs/deal-schema/data-model.mmd

This page describes every object the standard defines and how the objects relate. The diagram groups the objects into three clusters. The actors and messages cluster (left) covers who builds and sends the pack and who decides on it. The pack anatomy cluster (centre) covers what a pack is made of. The governing artifacts cluster (right) covers the versioned files that say what a pack may contain and when it is ready.

ACTORS & MESSAGES THE PACK GOVERNING ARTIFACTS PRODUCER the agent — proposes PACK SUMMARY one-page rendering DISPOSITION status · pack_ref decline reasons · info requests FUNDER gates + underwriting — dispose PACK schema_version 0.5.0 catalogue_version 0.15.0 ENTITY legal_form · gate SECTION INSTANCE bare · ':2' · ':3' … (repeatable) FIELD field_id · value (datatype-checked) PROVENANCE verified · self-declared document · not_collected READINESS oven-ready | gaps-remaining L1/L2/L3 · missing[] ATTESTATION attested_by · attested_at FACILITY TYPE code list · 15 products REQUIREMENT PROFILE required_fields per product one_shot | continuous CATALOGUE SECTION 15 sections · repeatable flag CATALOGUE FIELD tag · datatype · definition data_class (UK GDPR) CODE LIST 17 versioned enumerations REGISTRY reference-data · 11 registries what 'verified' verifies against assembles renders pack_ref issues consumes · gates dispose 1..* 1..* 1..1 0..1 conforms to governed by 1..* binds enum names source verified cites selects requires missing[]

How to read it

  • The pack anatomy (centre): a pack carries its two version stamps (both required), one applicant entity (the gate), one readiness verdict (with optional attestation), and one-or-more section instances. Each instance carries fields. Every field carries exactly one provenance.
  • The governing artifacts (right) are versioned files, not runtime objects. The catalogue says which sections/fields may exist (and their tag, datatype, code list, source). The facility type selects the requirement profile. The profile determines what missing[] means for this pack.
  • The actor loop (left) shows the framework's central idea as data. The producer assembles the pack. The funder consumes the pack and issues a disposition that references the exact pack version it decided on.

Mermaid source (renders in any mermaid tool): docs/deal-schema/data-model.mmd. A logical database model is deliberately out of scope (spec non-goals). This page explains the objects. It does not prescribe storage.

← Glossary Provenance model →

Provenance

Provenance records how each fact entered the pack. Provenance is the standard's central object. A consumer reasons about a pack one fact at a time.

kindmeaningmembers
verifiedChecked against a named source source (required) · via · date · expires_at · evidence_ref
self-declaredStated by the applicant—
documentBacked by an uploaded documentchecked · ref · label
not_collectedNot yet provided — an open admission that the fact is missinglabel
A producer MUST NOT fabricate provenance. A fact the producer did not establish is emitted as not_collected — never dressed up as verified or declared.

Tag ↔ provenance compatibility

Each catalogue field carries a tag describing how the fact is expected to enter the pack. The validator enforces compatibility:

catalogue tagpermitted provenance kinds
verifyverified, not_collected
declareself-declared, not_collected
docdocument, not_collected

A verified fact's source MUST additionally match the source the catalogue names for that field. Example: company_name verifies against companies_house, not an arbitrary string.

Freshness

Freshness is a consumer-side rule. Validation deliberately excludes fact age, so a pack never fails solely because time has passed. Each consumer sets its own rule for how fresh a fact must be, using provenance.date. The reference implementation provides stale_facts(pack, as_of, max_age_days), which returns the verified facts older than the given age. expires_at allows a producer to pre-declare an expiry.

Trust boundary (v0 limitation)

In v0, provenance is an honest claim by the producer, not a proof anyone else can check. Trusting a pack therefore means trusting its producer. Verifiable evidence anchors (signed attestations, hashable source responses, digital company identity) are planned to remove this limitation. Until then a consumer SHOULD treat a pack as strong preliminary evidence and re-check the facts that matter most.

← Entity model Readiness & conformance levels →

Readiness & conformance levels

The readiness object is the producer's claim. The validator checks that the claim is coherent with the pack's contents. The reference validator enforces all rules below.

Two labels, two different questions. status answers "is every required field present?" — oven-ready means nothing the funder needs to start is missing. conformance_level answers "how were those facts established?" Oven-ready does not mean verified, and neither label means approved. A pack can be oven-ready at L1-declared, where every value is applicant-stated. Read the conformance level and the provenance mix, not the status alone. L2 requires at least one verified fact; raising that floor to a coverage threshold is an open change proposal under the charter.

status / missing

  • status is oven-ready or gaps-remaining.
  • missing lists the required fields not provided (value null or absent), per the catalogue's baseline requirement profile (required_fields, profile baseline-v0). A required gap MUST appear in missing. Silent omission is not permitted.
  • oven-ready ⇒ missing == []. gaps-remaining ⇒ missing non-empty. Optional fields MAY be absent at oven-ready.

Conformance levels

levelrequirements (validator-enforced)
L1-declaredApplicant-stated information; no further requirements.
L2-verified-coreNo verify-tagged field present carries a self-declared value. The value not_collected is permitted: it openly records that the value was never collected. At least one verified fact exists.
L3-attestedL2 + attested: true + oven-ready.

Attestation

attested: true requires a non-empty declarations.truth_statement AND an attestation object: { attested_by, attested_at, statement_ref? }.

An attestation is the packing party's statement that the information is true. It does not transfer legal responsibility to, nor discharge the diligence obligations of, a receiving firm. Screening results carried in a pack are informational — they do not discharge a receiver's own MLR 2017 customer-due-diligence absent an explicit reg-39 reliance arrangement.

Entity gate

entity.legal_form may describe any applicant (ltd | llp | plc | partnership | sole_trader | other). A readiness claim (oven-ready, attested, or L2+) requires a corporate form (ltd/llp/plc). entity.legal_form must agree with business_identity.legal_form. Rationale: sole-trader and small-partnership lending can be a regulated credit agreement (RAO art 60B, subject to the art 60C exemptions; partnerships via art 60L). v0 does not cover regulated agreements. See Regulatory notes.

← Provenance model Field catalogue (data dictionary) →

Field catalogue — the data dictionary

catalogue_version 0.15.0 · 15 sections · 220 fields · baseline profile baseline-v0 (per-product profiles: Lending coverage)

The field catalogue is the data dictionary for the deal package. Every field carries a datatype and a definition. The definition appears in the muted row beneath each entry. Datatype vocabulary: string · text · monetary_amount (GBP) · integer · decimal · ratio · date (ISO 8601) · boolean · enum:<code-list> · document_ref · list_string · url. ● marks the baseline required fields. The baseline is the minimum a pack must provide (value not null) to be oven-ready. The baseline fields are: business_identity.company_name, business_identity.company_number, business_identity.legal_form, financials.statutory_accounts, banking.bank_statements, the_ask.amount, the_ask.purpose, declarations.truth_statement.

The MINIMUM fields a pack must PROVIDE (present, not not_collected) to be oven-ready under the baseline profile. Per-product-type profiles (secured vs unsecured, asset finance) are follow-up work. A required field left not_collected must appear in readiness.missing — enforced by the reference validator. Guarantor/lei/dscr etc. are deliberately NOT required in v0.
Data protection. This standard defines a data STRUCTURE, not a lawful basis. Packs carry personal data (director and guarantor identity, personal financials, screening results). The party assembling or receiving a pack is a controller in its own right under UK GDPR and must establish lawful basis, retention, and security independently. Screening results (sanctions/PEP) are informational to the receiver: they do NOT discharge the receiving firm's own MLR 2017 customer-due-diligence obligations (reliance requires an explicit MLR reg 39 arrangement).
Entity gate. v0 readiness claims are CORPORATE-ONLY: a pack whose entity is not ltd/llp/plc cannot claim oven-ready, attested, or conformance L2+ (enforced by the reference validator). sole_trader and small-partnership lending can be a regulated credit agreement (RAO art 60B, subject to the art 60C exemptions; partnerships via art 60L) — such packs may relate to a regulated credit agreement, implementers effecting introductions need credit-broking permission, and a dedicated regulated-agreement profile is future work not covered by v0.

business_identity — Business identity

fieldtypetagsourceclassreq.
company_namestring verifycompanies_house — ●
The entity's registered legal name as recorded at Companies House (not a trading name).
company_numberstring verifycompanies_house — ●
The Companies House registration number (8 characters, incl. SC/NI/OC prefixes).
legal_formenum:legal_form verifycompanies_house — ●
The applicant's legal form, normalised to the legal_form code list.
company_statusstring verifycompanies_house —
The registrar's current status for the entity (e.g. active, dissolved, liquidation).
incorporation_datedate verifycompanies_house —
The date the entity was incorporated/registered.
sic_codeslist_string verifycompanies_house —
UK SIC 2007 classification codes recorded for the entity (see reference-data: sic_codes).
leistring verifygleif —
ISO 17442 20-character Legal Entity Identifier, where the entity holds one (optional for SME packs).
trading_namestring declare— —
The name the business trades under when it differs from the registered name.
websiteurl declare— —
The business's primary public website.
registered_addresstext verifycompanies_house —
The registered office address as recorded at the company registry.
trading_addresstext declare— —
The address the business actually trades from, where different from the registered office.
vat_numberstring verifyhmrc_vat —
UK VAT registration number, checkable against the HMRC VAT registration checker.
employee_countinteger declare— —
Current headcount including working directors.
business_descriptiontext declare— —
What the business does, in the applicant's own words — products, customers, channels.

financials — Financials

fieldtypetagsourceclassreq.
turnovermonetary_amount declare— —
Revenue for the most recent 12-month period, GBP.
months_tradinginteger declare— —
Number of months the business has been trading (may differ from incorporation age).
accounts_overduestring verifycompanies_house —
Whether statutory filings are up to date at the registrar ('up to date' / 'overdue').
net_profitmonetary_amount declare— —
Net profit for the most recent financial year, GBP (negative = loss).
statutory_accountsdocument_ref doc— — ●
The most recent filed statutory accounts.
management_accountsdocument_ref doc— —
Recent management accounts (P&L + balance sheet), no older than 3 months.
cashflow_forecastdocument_ref doc— —
Forward cashflow projection covering at least 12 months.
business_plandocument_ref doc— —
The business plan supporting the ask, where the product/amount warrants one.
accounts_reference_datedate verifycompanies_house —
The made-up-to date of the most recent filed accounts, per the company registry.
aged_creditor_ledgerdocument_ref doc— —
Aged creditors report at the most recent month end — the mirror of the debtor book: who the business owes and how old the balances are.
creditor_daysinteger declare— —
Average days the business takes to pay its suppliers.
vat_returnsdocument_ref doc— —
The last four quarterly VAT returns — a low-friction cross-check on declared turnover.
hmrc_arrearstext declare— —
Any PAYE/VAT/CT arrears and any Time-to-Pay arrangement in place ('none' is a valid answer). HMRC arrears rank ahead of most creditors and lenders price them.
ccj_historytext verifyregistry_trust —
CCJs registered against the entity, per the public Register of Judgments, Orders and Fines — satisfied and unsatisfied.
accountant_detailsstring declare— —
Name and firm of the accountant who prepares the accounts — funders routinely verify accounts provenance with them.
accounting_consentboolean declare— —
Whether the applicant has connected their accounting system so figures can be read directly. Unlike open banking, accounting-data sharing is commercial API access, not a statutory right.
accounting_turnover_12mmonetary_amount verifyaccounting_api —
Turnover for the trailing 12 months read from the applicant's accounting ledger. The verified counterpart to the declared turnover field.
accounting_net_profit_12mmonetary_amount verifyaccounting_api —
Net profit for the trailing 12 months read from the accounting ledger.
accounting_gross_marginratio verifyaccounting_api —
Gross margin as a decimal fraction in [0,1], derived from ledger revenue and cost of sales.
accounting_creditors_totalmonetary_amount verifyaccounting_api —
Total outstanding trade creditors at the sync date — the verified counterpart to the aged creditor ledger upload.
accounting_last_syncdate verifyaccounting_api —
The date the accounting figures in this pack were read. Consumers SHOULD apply their own freshness policy to it, as with any verified fact.

banking — Banking

The open_banking-sourced fields define the TARGET shape; a producing system may not yet have a live open-banking integration (AskVouch's is not yet wired) — in that case these fields are emitted as not_collected, never fabricated.
fieldtypetagsourceclassreq.
bank_providerstring declare— —
The bank holding the business's primary current account.
bank_statementsdocument_ref doc— — ●
Business bank statements covering the most recent 6 months.
monthly_credit_turnovermonetary_amount verifyopen_banking —
Average monthly credits into the business account (consented open-banking read), GBP.
existing_repaymentsmonetary_amount verifyopen_banking —
Aggregate monthly outflow to existing credit commitments, GBP.
dscrdecimal verifyopen_banking —
Debt-service coverage ratio: net operating income ÷ total debt service, derived from consented account data. A coverage MULTIPLE (e.g. 1.25) — datatype decimal, not ratio, because it routinely exceeds 1.
statements_months_providedinteger declare— —
How many months of business bank statements the pack's bank_statements document covers.
average_monthly_balancemonetary_amount verifyopen_banking —
Average cleared balance over the statement period, from consented bank data.
returned_items_countinteger verifyopen_banking —
Count of returned direct debits, bounced payments and unpaid items over the last 6 months — a primary affordability distress signal.
other_banking_relationshipstext declare— —
Other business accounts or lenders the business banks with ('none' is a valid answer).
open_banking_consentboolean declare— —
Whether the applicant has consented to connect account data via open banking for verification.

security_assets — Security & assets

fieldtypetagsourceclassreq.
security_offeredenum:security_type declare— —
The security basis proposed for the facility, per the security_type code list.
charges_registertext verifycompanies_house —
Summary of charges registered against the entity (classification, status, persons entitled).
property_addresstext declare— —
Address of the property offered as security, where applicable.
valuation_reportdocument_ref doc— —
A RICS (or equivalent) valuation of the security property.
asset_scheduletext declare— —
Schedule of the assets being financed or offered as security.
buildings_insurancedocument_ref doc— —
Evidence of buildings insurance over the security property.
title_numberstring verifyland_registry —
The registered title number of charged property, checkable against the land register.
tenureenum:property_tenure declare— —
Tenure of the charged property.
lease_years_remaininginteger declare— —
Unexpired lease term where tenure is leasehold — short unexpired terms constrain lending.
estimated_valuemonetary_amount declare— —
The applicant's estimate of the asset's value, pending the valuation_report.
existing_charge_rankingtext declare— —
Charges already registered against this asset and the ranking the new lender is being offered (first, second, …).
ltv_requestedratio declare— —
Requested facility as a proportion of the asset's estimated value.
asset_make_modelstring declare— —
For financed plant/vehicles/equipment: manufacturer and model.
asset_identifierstring declare— —
Serial number, VIN, or registration identifying the specific financed asset.
asset_age_yearsinteger declare— —
Age of the financed asset — drives residual value and maximum term.
supplier_invoicedocument_ref doc— —
The supplier's invoice or quotation for the asset being financed.
outstanding_charges_countinteger verifycompanies_house —
Number of UNDISCHARGED charges registered against the company at Companies House. Satisfied charges are excluded: they are discharged history and do not encumber the security. Zero is a positive, recorded fact - unencumbered security is the good case and should not have to be inferred from an absence.

people — People

fieldtypetagsourceclassreq.
active_officerstext verifycompanies_house personal
The entity's active directors/officers as recorded at Companies House — a verified summary (count and/or names).
director_disqualifiedstring verifydisqualified_directors_register personal
Result of checking each director against the disqualified-directors register.
sanctions_pepstring verifysanctions_screen personal
Outcome of sanctions/PEP screening across the entity's directors.
⚠ Informational only — see data_protection_note. A structured result object (provider, list version, screened_at, result, match refs) replaces this bare string in a future minor version.
director_iddocument_ref doc— personal
Photographic identity document for the relevant director(s).
director_address_proofdocument_ref doc— personal
Proof of residential address for the relevant director(s), no older than 3 months.
psc_registertext verifycompanies_house personal
The PSC register entries for the company — who ultimately owns or controls it.
shareholding_percentratio declare— personal
This person's shareholding in the applicant.
role_titlestring declare— personal
This person's role in the business (e.g. managing director, finance director).
industry_experience_yearsinteger declare— personal
Years of relevant sector experience — a standard underwriting factor for newer businesses.
credit_search_consentboolean declare— personal
Whether this person has consented to a personal credit search where the funder requires one.

guarantor — Guarantor & personal financials

Concepts derived from SBA Form 413 (Personal Financial Statement) + SBA 1919 principals — US-government public-domain works. Closes the biggest gap in dealpack v0: commercial lending almost always needs a personal guarantee + the guarantor's net worth. REGULATORY NOTE: a guarantor is a natural person — where the underlying agreement is (or may be) regulated, FCA Consumer Duty, CONC guarantor provisions, and vulnerable-customer obligations attach to implementers. Where a guarantee may be SECURED ON A DWELLING, the regulated-mortgage analysis applies — the ila_confirmation field exists to evidence independent legal advice.
fieldtypetagsourceclassreq.
guarantee_requiredboolean declare— —
Whether the facility under discussion requires a personal guarantee.
guarantee_typeenum:guarantee_type declare— —
The form of guarantee offered, per the guarantee_type code list.
guarantee_amountmonetary_amount declare— —
The amount of the guarantee, GBP (the cap, for a limited guarantee).
guarantor_namestring declare— personal
Full name of the guarantor (a natural person).
guarantor_iddocument_ref doc— personal
Identity and address evidence for the guarantor.
guarantor_net_worthmonetary_amount declare— personal
The guarantor's stated net worth: total assets minus total liabilities, GBP (SBA-413 'Net Worth' concept).
personal_financial_statementdocument_ref doc— personal
A personal financial statement itemising the guarantor's assets, liabilities and income.
guarantor_homeownertext declare— personal
Whether the guarantor owns their home and the indicative equity available (regulated-mortgage trip-wire — see section note).
ila_confirmationdocument_ref doc— personal
Evidence the guarantor took independent legal advice, where the guarantee is secured on a dwelling.
guarantor_sanctions_pepstring verifysanctions_screen personal
Outcome of sanctions/PEP screening on the guarantor.
⚠ Informational only — see data_protection_note. Structured result object lands in a future minor version.

the_ask — The ask

fieldtypetagsourceclassreq.
amountmonetary_amount declare— — ●
The facility amount requested, GBP.
purposetext declare— — ●
Free-text description of what the funds will be used for (categorised by use_of_funds_code).
facility_typeenum:facility_type declare— —
The debt product requested, per the facility_type code list. Selects the requirement profile (see requirement-profiles.v0.json).
use_of_funds_codeenum:use_of_funds declare— —
The purpose category for the facility, per the use_of_funds code list.
⚠ Catalogue-level addition (not yet in AskVouch dealpack v0); the code list is defined in code-lists.v0.json.
candidate_productstext verifystructuring_need_map —
Product structures deterministically mapped as candidates for the stated purpose (never a recommendation or ranking).
term_monthsinteger declare— —
The requested repayment term, in months.
deposit_contributionmonetary_amount declare— —
The applicant's own contribution to the transaction, GBP.
repayment_profileenum:repayment_profile declare— —
The repayment shape sought.
exit_strategyenum:exit_strategy declare— —
How the facility will be repaid at term — REQUIRED evidence for exit-led products (bridging, development finance).
exit_evidencedocument_ref doc— —
Evidence supporting the stated exit: sale memorandum/agreement, refinance decision-in-principle, or contracted income.
drawdown_timelinetext declare— —
When the funds are needed and, for staged facilities, the expected drawdown pattern.
finance_basisenum:finance_basis declare— —
OPT-IN switch, per deal: conventional (the default — absent means conventional, nothing changes) or sharia_compliant, which activates the sharia overlay: the sector gate, the chosen structure's evidence requirements, and the S-ladder. See the sharia-structuring companion spec.
performance_evidence_basisenum:performance_evidence_basis declare— —
Which operational system of record proves performance for this borrower - the witness to the moment work was done. Absent or 'none' changes nothing: the pack behaves exactly as before. Naming one selects that vertical's overlay, which requires the verified counterparts that system can supply.

declarations — Declarations

fieldtypetagsourceclassreq.
warranty_questionnairetext declare— —
Summary of the applicant's answers to the warranty questionnaire (adverse disclosures itemised).
truth_statementtext declare— — ●
The applicant's signed statement that the pack's contents are true and complete — the basis of an attestation.
adverse_history_declarationtext declare— —
Declared CCJs, defaults, arrears, insolvency events (company or directors), or director disqualifications — 'none' is a valid declaration; the pack's verify fields cross-check it.
litigation_pendingtext declare— —
Current or threatened litigation involving the business ('none' is a valid answer).
data_processing_consentboolean declare— —
Confirmation the applicant consents to the processing and onward disclosure of the pack's data to prospective funders.

receivables — Receivables & debtor book

Evidence model for invoice discounting / factoring / asset-based lending. NOTE: these are CONTINUOUS facilities — initial onboarding uses this pack; ongoing lending operates on recurring borrowing-base certificates (readiness_mode: continuous in the requirement profile; certificate cadence is future profile work).
fieldtypetagsourceclassreq.
aged_debtor_ledgerdocument_ref doc— —
Aged debtor ledger showing outstanding invoices by debtor and age band.
debtor_concentrationratio declare— —
Share of the ledger owed by the largest debtor (top-1 concentration).
dilution_rateratio declare— —
Credit notes, discounts and disputes as a share of gross invoicing over the trailing period.
average_debtor_daysinteger declare— —
Average time to collect receivables, in days.
sample_invoicesdocument_ref doc— —
Representative recent invoices with proof of delivery/performance.
credit_control_evidencedocument_ref doc— —
Collections policy and debtor-management reporting evidencing the credit-control process.
debtor_contractsdocument_ref doc— —
Customer contracts or terms of trade underlying the material receivables.
sales_ledger_systemstring declare— —
The accounting/ledger system the debtor book is maintained in — funders assess auditability.
terms_of_tradedocument_ref doc— —
The business's standard terms and conditions of sale — assignability clauses matter to receivables funders.
debtor_insurancetext declare— —
Whether the debtor book is credit-insured, and with whom ('none' is a valid answer).
contra_accountstext declare— —
Customers who are also suppliers — contra balances reduce eligible receivables.
export_debtor_shareratio declare— —
Proportion of the debtor book owed by overseas debtors — often subject to lower advance rates.
eligible_receivablesmonetary_amount declare— —
The applicant's estimate of the eligible book after concentration, age, contra and export exclusions.
borrowing_base_certificatedocument_ref doc— —
The most recent borrowing-base certificate — the recurring artifact of continuous readiness: eligible collateral, advance rate, and availability, certified at a date.
accounting_debtors_totalmonetary_amount verifyaccounting_api —
Total outstanding trade debtors at the sync date — the verified counterpart to the aged debtor ledger upload.
pod_verified_valuemonetary_amount verifytms_api —
Value of invoiced work for which the transport/logistics system holds a proof of delivery. An invoice is only good collateral if the job was actually done; this is that evidence, at source.
delivered_not_invoiced_valuemonetary_amount verifytms_api —
Value of work completed and proven delivered but not yet invoiced. Invisible to the accounting ledger, which starts at the invoice — and to the funder. Financing at delivery rather than at invoice removes this period from the cash conversion cycle.
verified_dilution_rateratio verifytms_api,staffing_api —
Credit notes and disputed deliveries as a decimal fraction of invoiced value, in [0,1], measured in the source system. The verified counterpart to the declared dilution rate.
verified_debtor_daysinteger verifytms_api,staffing_api —
Measured invoice-to-cash days from the source system — the verified counterpart to declared average debtor days, and the DSO leg of the cash conversion cycle.
approved_unbilled_valuemonetary_amount verifystaffing_api —
Value of work signed off by the client but not yet invoiced, measured in the source system. In recruitment this is the approved-timesheet position: the worker is paid weekly while the client pays on terms, so this is the funding gap itself. Invisible to the ledger, because nothing has been raised.
approved_timesheet_countinteger verifystaffing_api —
Number of client-approved, not-yet-invoiced timesheets behind approved_unbilled_value. Distinguishes one large placement from many small ones, which is a different risk at the same value.
certified_to_date_valuemonetary_amount verifyconstruction_pm_api —
Value of applications for payment CERTIFIED by the contract administrator or QS - an independent party has confirmed the work was done. The construction analogue of POD-verified value: an application is only good collateral if the work was certified.
applied_not_certified_valuemonetary_amount verifyconstruction_pm_api —
Value applied for that has NOT been certified. Recorded deliberately as its own fact rather than folded into the certified figure: it is the contractor's own claim about the value of their work, and treating it as evidence would be the self-declaration this section exists to remove.
retention_held_valuemonetary_amount verifyconstruction_pm_api —
Earned, certified, undisputed money withheld under the contract - typically ~5% of contract value, half released at practical completion and half after the defects liability period. Invisible to the ledger because it sits in a contract schedule, not as a receivable. Release is CONDITIONAL and the counterparty risk sits with the main contractor, not the borrower.
retention_release_next_datedate verifyconstruction_pm_api —
The earliest contractual retention release date across the book. What a retention facility is priced against, since the question is when the cash lands, not whether it is owed.
main_contractor_concentrationratio verifyconstruction_pm_api —
Share of retention owed by the single largest main contractor, as a decimal fraction in [0,1]. The real credit question for retention finance: the borrower can be perfectly sound and still lose the money if the payer fails - upstream insolvency is the sector's recurring scandal.

inventory — Inventory & stock

Evidence model for stock/inventory finance and the inventory leg of an asset-based lending borrowing base. Stock is an asset class in its own right, treated the same way as receivables: a value, a location, a liquidity discount and a verifying source. CONTINUOUS facility — ongoing lending operates on recurring borrowing-base certificates that carry both the receivables and the inventory line.
fieldtypetagsourceclassreq.
stock_on_hand_valuemonetary_amount verifywms_api —
Value of stock on hand at the count date, at cost, read from the inventory/warehouse system. The verified counterpart to a declared stock figure.
stock_count_datedate verifywms_api —
The date the stock figures in this pack were read or counted. Consumers SHOULD apply their own freshness policy — stock ages faster than most facts in a pack.
stock_valuation_basisenum:stock_valuation_basis declare— —
How the stock value is struck. Materially changes what the figure means to a funder: cost is not net realisable value, and neither is orderly liquidation value.
stock_category_mixlist_string declare— —
Which categories the stock comprises (raw materials, work in progress, finished goods). Finished goods are ordinarily the most financeable; work in progress ordinarily the least.
aged_stock_shareratio verifywms_api —
Proportion of stock value older than the operator's slow-moving threshold, as a decimal fraction in [0,1]. The inventory analogue of an aged debtor bucket.
stock_turnover_daysinteger verifywms_api —
Days inventory outstanding — average days stock is held before sale. The inventory leg of the cash conversion cycle (DSO + DIO - DPO).
nolv_rateratio declare— —
Appraised net orderly liquidation value as a decimal fraction of cost, in [0,1]. What the stock is expected to realise in an orderly wind-down — the basis most inventory advance rates are struck against.
stock_appraisaldocument_ref doc— —
Independent appraisal supporting the NOLV rate.
stock_locationslist_string declare— —
Sites where the stock is held. Location drives enforceability: stock at a third-party site ordinarily needs a waiver of lien.
third_party_logistics_providerstring declare— —
The third party holding the stock, where it is not held at the applicant's own premises.
waiver_of_liendocument_ref doc— —
Waiver from the landlord or third-party warehouse, without which a funder's security over stock held at that site may rank behind theirs.
stock_insuranceboolean declare— —
Whether the stock is insured to at least its financed value.
inventory_systemstring declare— —
The inventory or warehouse management system the stock is tracked in — funders assess auditability and whether figures can be verified at source.
goods_in_transit_valuemonetary_amount verifytms_api —
Value of goods dispatched but not yet delivered, read from the transport/logistics system. Ordinarily financeable only where title and insurance in transit are established.

capital_structure — Capital structure & subordination

Evidence model for mezzanine / subordinated debt: the facility is priced off the whole capital stack, so the stack must be in the pack.
fieldtypetagsourceclassreq.
existing_debt_scheduletext declare— —
Schedule of existing borrowings: lender, facility type, balance, maturity, security held.
senior_facility_termsdocument_ref doc— —
The senior facility documentation the proposed facility ranks behind.
intercreditor_positiontext declare— —
Proposed subordination and intercreditor arrangements (ranking, standstill, payment blockage).
enterprise_valuationdocument_ref doc— —
Valuation supporting the capital structure, with the multiple/basis stated.
ebitdamonetary_amount declare— —
EBITDA for the most recent 12 months, GBP, basis stated (management or audited).
sponsor_detailstext declare— personal
Background of the sponsor or controlling shareholders, where relevant to the credit.
equity_kicker_termstext declare— —
Proposed warrant or equity-participation terms attached to the facility, if any.
group_structure_chartdocument_ref doc— —
Corporate structure showing parents, subsidiaries and cross-holdings — where the borrower sits in the group.
shareholder_loansmonetary_amount declare— —
Outstanding loans from shareholders or directors, and whether they will subordinate.
cross_guaranteestext declare— —
Existing guarantees given for or by other group companies ('none' is a valid answer).
existing_covenantstext declare— —
Financial covenants in existing facilities (leverage, interest cover, etc.) that a new facility must live alongside.
subordination_consenttext declare— —
Whether the senior lender has consented (or is expected to consent) to the new subordinated facility.

development — Development finance

Evidence model for property development finance (staged drawdown against a build programme).
fieldtypetagsourceclassreq.
gdvmonetary_amount declare— —
Projected gross development value on completion, GBP, basis stated.
total_build_costsmonetary_amount declare— —
Total construction costs including professional fees and contingency, GBP.
drawdown_scheduledocument_ref doc— —
Drawdown schedule mapped to the build programme milestones.
planning_permissiondocument_ref doc— —
Planning consent or permitted-development evidence for the scheme.
monitoring_surveyorstring declare— —
The independent monitoring surveyor overseeing drawdowns.
development_appraisaldocument_ref doc— —
The full residual appraisal: land cost, build cost, fees, finance, contingency and profit on cost/GDV.
build_cost_breakdowndocument_ref doc— —
Elemental or QS-prepared breakdown supporting total_build_costs.
planning_referencestring declare— —
The local planning authority and application/decision reference for the consent relied on.
s106_cil_liabilitymonetary_amount declare— —
Planning obligations and Community Infrastructure Levy payable — a real cost line funders check.
professional_teamtext declare— —
Architect, QS, structural engineer and principal designer appointed to the scheme.
main_contractorstring declare— —
The main contractor (or confirmation of self-build/construction management).
contractor_track_recorddocument_ref doc— —
Evidence of comparable completed schemes by the developer and/or main contractor.
build_programmedocument_ref doc— —
The construction programme with milestones — drives the drawdown schedule and interest roll-up.
warranty_providerstring declare— —
The new-build structural warranty provider for the completed units.
presales_preletsdocument_ref doc— —
Exchanged pre-sales or agreed pre-lets — the strongest exit evidence a scheme can carry.
certified_work_in_placemonetary_amount verifyconstruction_pm_api —
Value of work the monitoring surveyor has CERTIFIED as built, cumulative. A development facility draws down against this rather than against the developer's own view of progress. The development analogue of a certified payment application.
cost_to_completemonetary_amount verifyconstruction_pm_api —
Remaining cost to finish the scheme, as assessed by the monitoring surveyor. Paired with undrawn facility this answers the question development finance actually fails on - is there enough money left to finish? A half-built site is worth far less than either the land or the finished scheme.
drawn_to_datemonetary_amount verifyconstruction_pm_api —
Cumulative drawdown against the development facility.
last_certificate_datedate verifyconstruction_pm_api —
Date of the most recent monitoring surveyor certificate. Staleness matters: a scheme monitored three months ago is not a monitored scheme.
programme_variance_weeksinteger verifyconstruction_pm_api —
Weeks behind (positive) or ahead of (negative) the agreed build programme, per the monitoring surveyor. Signed deliberately - running late is the leading indicator of a cost overrun, and a scheme running early must not be reported as though it were late.
cost_variance_rateratio verifyconstruction_pm_api —
Forecast cost against original budget as a decimal fraction in [0,1] - the overrun to date. Measured by the monitoring surveyor rather than stated by the developer.

trade_finance — Trade finance

Evidence for import/export and transaction-cycle facilities. Readiness is per-facility; individual transactions recur over the facility's life (continuous mode).
fieldtypetagsourceclassreq.
trade_directionenum:trade_direction declare— —
Whether the facility funds imports, exports, or both.
supplier_detailstext declare— —
The supplier(s) whose goods the facility funds: name, jurisdiction, payment terms.
supplier_track_recordtext declare— —
Length and volume of the trading relationship with the key supplier(s) — new-supplier transactions carry different risk.
purchase_ordersdocument_ref doc— —
Confirmed customer purchase orders underpinning the transactions to be funded.
proforma_invoicedocument_ref doc— —
The supplier's proforma invoice for the goods being financed.
trade_cycle_daysinteger declare— —
Order-to-cash cycle length: order → shipment → delivery → customer payment.
shipping_documentsdocument_ref doc— —
Transport and title documentation for in-flight transactions (e.g. bill of lading) — recurring per transaction, not required at facility readiness.
delivery_termsstring declare— —
The agreed delivery-terms basis for the funded transactions (who carries freight, insurance and risk, and to where).
currency_exposuretext declare— —
Transaction currencies and any hedging in place ('unhedged' is a valid answer).
trade_credit_insurancetext declare— —
Whether transactions or buyers are credit-insured, and with whom ('none' is a valid answer).

card_receipts — Card receipts (merchant cash advance)

Evidence for receipts-linked advances repaid as a share of card takings.
fieldtypetagsourceclassreq.
acquirer_namestring declare— —
The merchant-acquiring provider processing the business's card payments.
acquirer_statementsdocument_ref doc— —
6–12 months of merchant acquirer statements — the primary underwriting evidence for a receipts-linked advance.
monthly_card_turnovermonetary_amount declare— —
Average monthly card takings over the statement period.
card_turnover_seasonalitytext declare— —
Seasonal pattern of card takings — repayments flex with receipts, so the shape matters.
proposed_split_percentageratio declare— —
The proportion of daily card receipts proposed to service the advance.
acquirer_switch_requiredboolean declare— —
Whether the funder requires the business to switch acquirer or add a lockbox/split arrangement.
verified_card_turnovermonetary_amount verifypsp_api —
Monthly card takings measured at the acquirer or payment service provider, over a stated window. The verified counterpart to declared monthly_card_turnover. Card settlement is among the most predictable receivables in SME lending - daily takings, seasonality and trend are all readable from the same feed.
verified_transaction_countinteger verifypsp_api —
Number of card transactions in the measured window. Distinguishes high-volume low-ticket trade from the reverse at the same turnover, which is a different risk.
verified_average_transactionmonetary_amount verifypsp_api —
Mean transaction value in the measured window, measured at the acquirer.
verified_refund_rateratio verifypsp_api —
Refunds and chargebacks as a decimal fraction of gross takings in [0,1], measured at the acquirer. The card-trade analogue of dilution: it is what the advance actually shrinks by, and today it is not asked for at all.
pending_settlement_valuemonetary_amount verifypsp_api —
Takings captured by the acquirer but not yet settled to the merchant's bank account. Proof of FORWARD RECEIPT: the money is contractually coming, and the payer is the acquirer rather than a debtor who might dispute it.
settlement_next_datedate verifypsp_api —
The next contractual settlement date from the acquirer. What a merchant cash advance is serviced against, since repayment is a percentage of takings as they settle.

sharia_compliance — Sharia-compliant structuring

Evidence for sharia-compliant deals — active only when the_ask.finance_basis is sharia_compliant. The compliance IS the transaction structure: the standard evidences HOW the deal follows a certified template (structure, sequence, prohibition terms) and WHO certified the template. The standard never rules on religious law itself — where schools of thought differ, the pack states which structure and whose certification; the funder's own board's gates dispose.
fieldtypetagsourceclassreq.
sharia_structureenum:sharia_structure declare— —
The Islamic financing structure the deal uses — selects the structure's evidence requirements (requirement-profiles overlay).
claimed_levelenum:sharia_level declare— —
S1-declared (stated) / S2-structure-evidenced (sector gate passed + all structure evidence present + sequence checks pass) / S3-certified (S2 + an in-date board certificate for the template used). Coherence enforced by the reference validator.
sharia_certificatedocument_ref doc— —
The certification of the PRODUCT TEMPLATE (contract set + process) by a named board or scholar. Certification covers the template; the pack evidences that this deal followed it.
certifying_boardstring declare— —
Who certified the template — the board or scholar name and capacity.
certificate_expirydate declare— —
When the certification lapses or is due for periodic review — consumers apply their own freshness policy (validation itself is clock-free).
template_refstring declare— —
Which certified product template this deal follows (the board's reference).
late_payment_charity_clausedocument_ref doc— —
The contract clause routing late-payment amounts to charity rather than to income — the core no-interest prohibition term, evidenced.
disclosed_costmonetary_amount declare— —
Murabaha/tawarruq: the funder's acquisition cost, disclosed to the customer as a separate figure.
disclosed_markupmonetary_amount declare— —
Murabaha/tawarruq: the profit element, disclosed separately from cost — a disclosed sale margin, not time-indexed interest.
ownership_transfer_datedate declare— —
The date the funder acquired ownership of the asset/commodity. SEQUENCE RULE (validator-enforced): must not be after sale_contract_date — the funder must own before it sells.
sale_contract_datedate declare— —
The date of the onward sale to the customer — must not precede ownership_transfer_date.
ownership_transfer_evidencedocument_ref doc— —
Evidence the funder took ownership: supplier invoice in the funder's name, title transfer, or commodity purchase confirmation.
sale_contractdocument_ref doc— —
The executed onward contract with the customer (sale, lease, or co-ownership as the structure requires).
co_ownership_agreementdocument_ref doc— —
Diminishing musharaka: the joint-ownership agreement between funder and customer.
buyout_scheduledocument_ref doc— —
Diminishing musharaka / ijara-to-own: the schedule by which the customer acquires the funder's share.
funder_insurance_evidencedocument_ref doc— —
Ijara: evidence the FUNDER (as owner) insures the asset and bears ownership risk.
partnership_agreementdocument_ref doc— —
The executed musharaka or mudaraba partnership agreement — who contributes what, and how profit and loss are shared.
capital_contribution_fundermonetary_amount declare— —
The funder's capital contribution to the partnership.
capital_contribution_customermonetary_amount declare— —
The customer's capital contribution (musharaka). In a mudaraba the funder provides all the capital and this is zero.
profit_sharing_ratioratio declare— —
The customer's agreed share of PROFIT, as a 0–1 fraction. Profit may be shared by agreement; losses may not — losses follow capital.
loss_follows_capitalboolean declare— —
Confirmation the agreement shares losses in proportion to capital contributed — the partnership rule a certifying board looks for.
agency_agreementdocument_ref doc— —
The executed wakala agreement — what the agent is appointed to do, and on what terms.
agency_feemonetary_amount declare— —
The disclosed wakala fee — a fee for a service, not a return on money.
specification_delivery_scheduledocument_ref doc— —
The specification and delivery schedule for goods being commissioned (istisna) or bought forward (salam) — certainty of what, when, and at what price.
advance_payment_evidencedocument_ref doc— —
Salam: evidence the full purchase price was paid up front — the defining feature of the structure.
← Readiness & conformance levels Code lists →

Code lists

code_lists_version 0.8.0 · 23 lists · code-lists.v0.json

A code list is a versioned list of allowed codes, published as part of the standard in its own right. A catalogue field bound to a list (its datatype reads enum:<list>) must carry one of the listed codes as its value. The reference validator enforces this rule. Pack-level enumerations (provenance_kind, readiness_status, conformance_level) are also published here. This gives consumers one place to resolve every code.

The use_of_funds list is an authored v0 — refine with funder input before v1.

legal_form

Legal form of the applicant entity.

codelabel
ltdPrivate limited company
llpLimited liability partnership
plcPublic limited company
partnershipGeneral/small partnership (may be regulated credit — see entity gate)
sole_traderSole trader (may be regulated credit — see entity gate)
otherOther/unknown legal form

provenance_kind

How a fact entered the pack.

codelabel
verifiedChecked against a named reference-data source
self-declaredStated by the applicant
documentBacked by an uploaded document
not_collectedNot yet provided — honest absence, never fabricated

field_tag

How a catalogue field is expected to be established.

codelabel
verifyChecked against a source
declareApplicant-stated
docDocument upload

readiness_status

The pack-level readiness verdict.

codelabel
oven-readyNo required gaps
gaps-remainingRequired fields outstanding (listed in readiness.missing)

conformance_level

Evidence level the pack conforms to.

codelabel
L1-declaredApplicant-stated
L2-verified-coreNo self-declared verify-fields; ≥1 verified fact
L3-attestedL2 + attested + oven-ready

data_class

Data-protection classification of a field.

codelabel
personalPersonal data under UK GDPR — controller obligations attach

guarantee_type

Type of personal guarantee offered.

codelabel
personalPersonal guarantee
limitedLimited guarantee (capped)
joint_severalJoint & several guarantee

security_type

Security offered against the facility.

codelabel
unsecuredUnsecured
secured_propertySecured on property
secured_assetSecured on specific assets (asset finance)
debentureDebenture / floating charge
guarantee_onlyPersonal guarantee only

use_of_funds

Purpose category for the requested facility (the facility-purpose classification — authored v0, refine with funder input).

codelabel
working_capitalWorking capital / cashflow
equipment_assetsEquipment / asset purchase
vehiclesVehicles / fleet
property_purchaseCommercial property purchase
property_developmentProperty development / conversion
fit_outFit-out / refurbishment
stockStock / inventory
refinanceRefinance / restructure existing debt
acquisitionBusiness acquisition / MBO / franchise
growthGrowth / expansion / hiring
taxTax / VAT / one-off liabilities
invoice_financeInvoice / receivables finance
otherOther (describe in the_ask.purpose)

verification_source

Named sources a verified fact may cite — see reference-data.v0.json for registry detail.

codelabel
companies_houseUK Companies House
fca_registerFCA Financial Services Register
gleifGLEIF LEI registry
open_bankingUK Open Banking (consented account data)
sanctions_screenSanctions / PEP screening provider
disqualified_directors_registerCH disqualified-directors register
structuring_need_mapDeterministic product-structure map (producer-internal)
hmrc_vatHMRC VAT registration checker
registry_trustRegister of Judgments, Orders and Fines (Registry Trust)
land_registryHM Land Registry (title register)
accounting_apiAccounting system (Open Accounting — Codat or a direct Xero/QuickBooks/Sage connection)

disposition_status

Funder response states for a submitted pack (disposition.schema.json). The disposition message is how 'the funder disposes' becomes machine-readable.

codelabel
receivedPack received — acknowledgment only
in_reviewUnder review
info_requestedMore information requested (field_ids listed)
declinedDeclined (reason_code required)
offer_issuedOffer / indicative terms issued (terms travel outside this standard)

decline_reason

Structured decline reasons — so a decline is actionable by the producer (and its chase engine) rather than free text.

codelabel
outside_credit_appetiteOutside current credit appetite
insufficient_trading_historyInsufficient trading history
adverse_credit_historyAdverse credit history
insufficient_securityInsufficient or unsuitable security
affordability_not_evidencedAffordability / serviceability not evidenced
sector_exclusionSector or activity exclusion
incomplete_packPack incomplete (prefer info_requested where possible)
kyc_aml_not_satisfiedKYC / AML not satisfied
withdrawn_by_applicantWithdrawn by the applicant
otherOther (detail in free text)

facility_type

The debt product/instrument requested — the product taxonomy (distinct from use_of_funds, which classifies purpose).

codelabel
term_loanTerm loan (secured or unsecured)
revolving_credit_facilityRevolving credit facility (RCF)
overdraftBusiness overdraft
asset_finance_hpAsset finance — hire purchase
asset_finance_leaseAsset finance — finance/operating lease
invoice_discountingInvoice discounting (confidential or disclosed)
factoringFactoring (credit control outsourced)
asset_based_lendingAsset-based lending (revolving, multi-asset borrowing base)
trade_financeTrade finance (import/export, letters of credit)
bridgingBridging finance (short-term, exit-led)
development_financeProperty development finance (staged drawdown)
mezzanine_subordinatedMezzanine / subordinated debt
merchant_cash_advanceMerchant cash advance (receipts-linked)
sale_and_leasebackSale and leaseback
otherOther (describe in the_ask.purpose)
inventory_financeInventory / stock finance

repayment_profile

The repayment shape sought for the facility.

codelabel
amortisingAmortising (capital + interest)
interest_onlyInterest only, capital at term
bulletBullet / single repayment at term
revolvingRevolving (draw, repay, redraw)
receipts_linkedReceipts-linked (repays as a share of takings)

exit_strategy

How an exit-led facility (bridging, development) will be repaid at term.

codelabel
sale_of_assetSale of the asset / completed units
refinanceRefinance onto a term facility
trading_receiptsRepayment from trading receipts
contracted_incomeContracted income (pre-sales, pre-lets, awarded contracts)
otherOther (describe in the_ask.purpose)

property_tenure

Tenure of charged property.

codelabel
freeholdFreehold
leaseholdLeasehold
long_leaseholdLong leasehold (typically 125+ years)
otherOther / mixed

trade_direction

Direction of the funded trade flows.

codelabel
importImport
exportExport
bothImport and export

finance_basis

Per-deal financing basis. Absent = conventional; sharia_compliant activates the sharia overlay (sector gate, structure evidence, S-ladder).

codelabel
conventionalConventional financing (the default)
sharia_compliantSharia-compliant financing (overlay active)

sharia_structure

Islamic financing structures. The standard evidences the chosen structure's checkable requirements; it does not rule on the structures themselves — certification does.

codelabel
murabahaMurabaha (cost-plus sale — funder buys, owns, sells at disclosed cost + markup)
tawarruqTawarruq / commodity murabaha (monetisation via commodity purchase and sale)
ijaraIjara (lease — funder owns and insures the asset)
ijara_muntahia_bittamleekIjara muntahia bittamleek (lease ending in ownership)
diminishing_musharakaDiminishing musharaka (co-ownership + progressive buyout + rent on the funder's share)
musharakaMusharaka (profit-and-loss-sharing partnership)
mudarabaMudaraba (investor capital + manager expertise, shared profit)
wakalaWakala (agency — agent invests/collects for a fee)
istisnaIstisna (commissioned manufacture / construction)
salamSalam (forward purchase, price paid up front)
otherOther (describe; certification names the structure)

sharia_level

Sharia conformance ladder — mirrors L1/L2/L3. Coherence enforced by the reference validator.

codelabel
S1-declaredStructure stated by the applicant
S2-structure-evidencedSector gate passed + all structure evidence present + sequence checks pass
S3-certifiedS2 + board certificate for the template used (with named board + review date)

sharia_excluded_sic

Deterministic sector gate: UK SIC 2007 prefixes excluded for sharia-compliant deals — a pack whose VERIFIED sic_codes match any prefix cannot carry finance_basis sharia_compliant. A floor, not a ceiling: codes catch what codes can catch; certification review covers the rest.

codelabel
1101Distilling and spirits
1102Wine production
1103Cider and fruit wines
1104Other fermented beverages
1105Beer production
1200Tobacco products
2540Weapons and ammunition
3040Military fighting vehicles
4634Wholesale of alcoholic beverages
4635Wholesale of tobacco products
4726Retail of tobacco products
6419Conventional banking (interest-based deposit taking)
6492Conventional credit granting (interest-based)
9200Gambling and betting

stock_valuation_basis

codelabel
costAt cost
lower_of_cost_or_nrvLower of cost or net realisable value
net_realisable_valueNet realisable value
orderly_liquidation_valueNet orderly liquidation value (NOLV)

performance_evidence_basis

codelabel
proof_of_deliveryProof of delivery (transport / logistics)
approved_timesheetApproved timesheet (recruitment / staffing)
certified_applicationCertified payment application (construction)
noneNo operational system of record
← Field catalogue (data dictionary) Reference data →

Reference data

reference_data_version 0.8.0 · 17 registries · reference-data.v0.json

This page lists the external registries a verified fact may cite as its source. Each entry states what the registry verifies, its identifier format, and its access terms. A verified fact's source must be one of these registries. The source must also match the catalogue's named source for the field. Identifier formats are provisional until we have checked each source's terms.

companies_house — Companies House

operatorUK Government (BEIS/DBT)
verifiesCompany identity, status, incorporation, SIC codes, officers, filing history, charges register
identifierCompany number — 8 characters (e.g. 00000000, SC000000, OC000000 for LLPs)
accessFree public API (api.company-information.service.gov.uk), rate-limited, API key
urlhttps://www.gov.uk/government/organisations/companies-house

fca_register — FCA Financial Services Register

operatorFinancial Conduct Authority
verifiesFirm authorisation, permissions, Appointed-Representative status
identifierFirm Reference Number (FRN) — 6–7 digits
accessFree public API (register.fca.org.uk), registration required
urlhttps://register.fca.org.uk

gleif — GLEIF — Global LEI Index

operatorGlobal Legal Entity Identifier Foundation
verifiesLegal Entity Identifier, entity legal name, ownership relationships (level 2)
identifierLEI — 20 characters, ISO 17442
accessFree public API (api.gleif.org), open data (CC0)
urlhttps://www.gleif.org

sic_codes — UK SIC 2007

operatorONS / Companies House
verifiesNature-of-business classification
identifier5-digit SIC 2007 code
accessOpen publication; carried on the Companies House record
urlhttps://resources.companieshouse.gov.uk/sic/

disqualified_directors_register — Register of disqualified directors

operatorCompanies House / Insolvency Service
verifiesDirector disqualification status
identifierPerson name + date of birth match (no public stable id)
accessFree public search; CH API officer disqualification endpoints
urlhttps://www.gov.uk/search-the-register-of-disqualified-company-directors

sanctions_screen — Sanctions & PEP screening

operatorOFSI consolidated list (UK) / UN / commercial screening providers (e.g. ComplyAdvantage)
verifiesSanctions designation, politically-exposed-person status
identifierProvider match reference; underlying lists: OFSI Group ID, UN reference
accessOFSI list free; commercial providers licensed. Results are informational to a pack receiver (MLR reg-39 note in the catalogue)
urlhttps://www.gov.uk/government/publications/financial-sanctions-consolidated-list-of-targets

open_banking — UK Open Banking (account information)

operatorOBIE standards; data via FCA-authorised AISPs
verifiesAccount transactions, balances → affordability, credit turnover, existing repayments, DSCR
identifierConsent-scoped account access (no public identifier); facts carry the AISP as via
accessRequires an FCA-authorised AIS provider + customer consent
urlhttps://www.openbanking.org.uk

land_registry — HM Land Registry (planned adapter — cited by security_assets.title_number)

operatorUK Government
verifiesProperty title, ownership, charges over property (future: security_assets verification)
identifierTitle number
accessPaid API/services; open price-paid data
urlhttps://www.gov.uk/government/organisations/land-registry

hmrc_vat — HMRC VAT registration checker

operatorHM Revenue & Customs
verifiesVAT registration number and the registered business name/address
identifiervat_number
accessfree public API (Check a UK VAT number)
urlhttps://developer.service.hmrc.gov.uk/api-documentation/docs/api/service/vat-registered-companies-api

registry_trust — Register of Judgments, Orders and Fines

operatorRegistry Trust Ltd
verifiesCounty court judgments (CCJs) and similar registered judgments against the entity
identifierentity name / address search
accesspublic search, paid per search (TrustOnline)
urlhttps://www.trustonline.org.uk

structuring_need_map — Deterministic product-structure map

operatorthe producing platform (producer-internal)
verifiesCandidate product structures for the stated funding need — a deterministic mapping, not an external register
identifierproducer-internal
accessproducer-internal — listed for completeness so every catalogue verify-source has a registry entry
urlhttps://askvouch.com/dev#coverage

accounting_api — Accounting system (Open Accounting)

operatorThe applicant's accounting provider, reached directly or via an aggregator (e.g. Codat)
verifiesLedger-derived financials: turnover, net profit, gross margin, trade debtors and creditors, as at a stated sync date
identifierconsented connection to the applicant's accounting system
accesscommercial API access with the applicant's consent — NOT a statutory open-data right, unlike UK Open Banking. Terms are set by the provider or aggregator.
urlhttps://www.codat.io

wms_api — Inventory / warehouse management system

operator
verifies
identifier
accessconsented
url

tms_api — Transport / logistics management system

operator
verifies
identifier
accessconsented
url

staffing_api — Recruitment pay-and-bill / staffing system

operator
verifies
identifier
accessconsented
urlhttps://bullhorn.github.io/rest-api-docs/

construction_pm_api — Construction project / contract administration system

operator
verifies
identifier
accessconsented
urlhttps://developers.procore.com

psp_api — Card acquirer / payment service provider

operator
verifies
identifier
accessconsented
urlhttps://developer.squareup.com/reference/square
← Code lists JSON Schema →

JSON Schema

https://askvouch.com/schemas/deal-package-readiness/v0.5.0/deal-package.schema.json · JSON Schema 2020-12

This is the full, normative schema document. Validation is split between the schema and the reference validator by design. The schema checks the pack's shape: the envelope, field objects, provenance variants, and the readiness object. The reference validator enforces the rest — catalogue membership, tag compatibility, and the readiness rules. This split allows the catalogue to version independently of the schema.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://askvouch.com/schemas/deal-package-readiness/v0.5.0/deal-package.schema.json",
  "title": "Lending Deal-Package Readiness — pack instance",
  "description": "Validates a FILLED deal package: every fact carries a value + provenance, and the pack carries a readiness verdict. Provenance and readiness are first-class — a publishable layer no open lending standard currently provides. WHICH fields may appear is governed by field-catalogue (see catalogue_version). NOTE: the $id namespace is provisional (askvouch.com, owned) pending a neutral home and name clearance.",
  "type": "object",
  "required": [
    "standard",
    "schema_version",
    "catalogue_version",
    "entity",
    "sections",
    "readiness"
  ],
  "properties": {
    "standard": {
      "const": "lending-deal-package-readiness"
    },
    "schema_version": {
      "type": "string",
      "pattern": "^\\d+\\.\\d+\\.\\d+$"
    },
    "catalogue_version": {
      "type": "string",
      "pattern": "^\\d+\\.\\d+\\.\\d+$"
    },
    "entity": {
      "type": "object",
      "required": [
        "legal_form"
      ],
      "additionalProperties": false,
      "properties": {
        "legal_form": {
          "description": "Broad enum so a pack can DESCRIBE any applicant. The eligibility GATE is a readiness rule (enforced by the reference validator): oven-ready / L2+ / attested packs require a corporate form (ltd/llp/plc). sole_trader and small-partnership lending can be a regulated credit agreement (RAO art 60B, subject to the art 60C exemptions; partnerships via art 60L) — such packs may relate to a regulated credit agreement and implementers carry the corresponding FCA obligations; a dedicated regulated-agreement profile is future work, not covered by v0.",
          "enum": [
            "ltd",
            "llp",
            "plc",
            "partnership",
            "sole_trader",
            "other"
          ]
        },
        "jurisdiction": {
          "type": "string",
          "default": "GB"
        }
      }
    },
    "sections": {
      "type": "object",
      "minProperties": 1,
      "description": "section_id -> { field_id -> field }. Legal section/field ids are governed by the field catalogue — enforced by the reference validator (cross_check_catalogue), not by this schema document. REPEATING GROUPS (v0.3, additive): sections the catalogue marks repeatable:true may appear as further instances suffixed ':2', ':3', … (e.g. 'guarantor', 'guarantor:2') — each instance with its own per-fact provenance. Instances of non-repeatable sections are rejected by the reference validator.",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/$defs/field"
        }
      }
    },
    "producer": {
      "type": "object",
      "description": "OPTIONAL but RECOMMENDED (v0.5.0): who assembled this pack. In v0 provenance is the producer's recorded claim rather than a proof a consumer can check independently, so trusting a pack means trusting its producer. This block lets a consumer know whose claim it is, and what regulatory status that party holds.",
      "required": [
        "name"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "description": "The legal or trading name of the party that assembled the pack."
        },
        "role": {
          "type": "string",
          "description": "How the producer acted on this case, e.g. 'origination platform', 'broker', 'lender'."
        },
        "fca_status": {
          "description": "The producer's FCA position for the activity carried on in assembling and passing this pack. not_stated is honest; omitting the block entirely says nothing at all.",
          "enum": [
            "authorised",
            "appointed_representative",
            "unregulated",
            "not_applicable",
            "not_stated"
          ]
        },
        "fca_frn": {
          "type": "string",
          "description": "The Firm Reference Number on the FCA Register, where the producer is authorised or an appointed representative. Checkable against the fca_register entry in reference-data."
        },
        "principal_name": {
          "type": "string",
          "description": "Where fca_status is appointed_representative: the principal firm that carries regulatory responsibility (FSMA s.39)."
        },
        "contact": {
          "type": "string",
          "description": "A contact address for questions about this pack."
        }
      }
    },
    "readiness": {
      "$ref": "#/$defs/readiness"
    },
    "signatures": {
      "type": "array",
      "description": "OPTIONAL evidence anchors (v1.0 layer, see spec/evidence-anchors-design.md). Each entry is a DETACHED JWS (RFC 7515) over the RFC 8785 JCS canonical bytes named by `over`: 'pack' = the whole document minus this signatures block; 'attestation' = the attestation tuple bound to the pack's content hash, so an attestation cannot be replayed onto a different pack. The signing algorithm is read from the SIGNED protected header, never from an unprotected field, so an algorithm-substitution attack cannot downgrade a signature. Structure only is checked here; authenticity requires a public key the consumer supplies (schema/evidence.py verify_signatures) — the reference validator never fetches a key. NOT yet required by any conformance level: that is the v1.0 rule change.",
      "maxItems": 16,
      "items": {
        "type": "object",
        "required": [
          "over",
          "protected",
          "signature"
        ],
        "additionalProperties": false,
        "properties": {
          "over": {
            "description": "What the signature covers.",
            "enum": [
              "pack",
              "attestation"
            ]
          },
          "protected": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "base64url (unpadded) JOSE protected header — carries the signed `alg` and `kid`, and optionally `frn` binding the key to the producer's FCA Firm Reference Number."
          },
          "signature": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "base64url (unpadded) signature. ES256 is raw R||S per JOSE, not DER."
          }
        }
      }
    }
  },
  "additionalProperties": false,
  "$defs": {
    "field": {
      "type": "object",
      "required": [
        "value",
        "provenance"
      ],
      "properties": {
        "value": {
          "type": [
            "string",
            "number",
            "boolean",
            "null",
            "array",
            "object"
          ]
        },
        "provenance": {
          "$ref": "#/$defs/provenance"
        }
      },
      "additionalProperties": false
    },
    "provenance": {
      "description": "How a fact entered the pack, and when it was checked. Aligned with what a producing system (e.g. AskVouch dealpack/assemble.py) actually emits: verified facts carry the check date; document/not_collected may carry a display label.",
      "oneOf": [
        {
          "type": "object",
          "required": [
            "kind",
            "source"
          ],
          "additionalProperties": false,
          "properties": {
            "kind": {
              "const": "verified"
            },
            "source": {
              "type": "string"
            },
            "via": {
              "type": "string"
            },
            "date": {
              "type": "string"
            },
            "expires_at": {
              "type": "string"
            },
            "evidence_ref": {
              "type": "string",
              "description": "OPAQUE locator for the stored source response — a storage key, not a fetch instruction. A consumer that chooses to dereference it MUST treat it as untrusted input (allowlist schemes, block SSRF targets, bound size/type/time — see the spec's Security considerations)."
            },
            "evidence_hash": {
              "type": "string",
              "pattern": "^sha256:[0-9a-f]{64}$",
              "description": "OPTIONAL evidence anchor (v1.0 layer, spec/evidence-anchors-design.md §3b): 'sha256:' + hex of the RFC 8785 JCS bytes of the SOURCE'S OWN RESPONSE that established this fact. Lets a consumer re-hash the stored (or re-fetched) response and confirm the producer neither invented nor altered it — the difference between 'we say we checked Companies House' and 'here is the checkable trace'. NOT proof the source was honest, and NOT producer authenticity (that is the pack signature). Computed by schema/evidence.py evidence_hash(); checked by verify_evidence()."
            }
          }
        },
        {
          "type": "object",
          "required": [
            "kind"
          ],
          "additionalProperties": false,
          "properties": {
            "kind": {
              "const": "self-declared"
            }
          }
        },
        {
          "type": "object",
          "required": [
            "kind"
          ],
          "additionalProperties": false,
          "properties": {
            "kind": {
              "const": "document"
            },
            "checked": {
              "type": "boolean"
            },
            "ref": {
              "type": "string"
            },
            "label": {
              "type": "string"
            }
          }
        },
        {
          "type": "object",
          "required": [
            "kind"
          ],
          "additionalProperties": false,
          "properties": {
            "kind": {
              "const": "not_collected"
            },
            "label": {
              "type": "string"
            }
          }
        }
      ]
    },
    "readiness": {
      "type": "object",
      "required": [
        "status",
        "attested",
        "conformance_level",
        "missing"
      ],
      "additionalProperties": false,
      "properties": {
        "status": {
          "description": "oven-ready REQUIRES missing == [] (enforced by the reference validator). gaps-remaining requires a non-empty missing list.",
          "enum": [
            "oven-ready",
            "gaps-remaining"
          ]
        },
        "attested": {
          "description": "true REQUIRES declarations.truth_statement with a non-empty value AND an attestation object (enforced by the reference validator). An attestation is the packing party's statement — it does NOT transfer legal responsibility to, or discharge the diligence obligations of, a receiving firm.",
          "type": "boolean"
        },
        "attestation": {
          "type": "object",
          "required": [
            "attested_by",
            "attested_at"
          ],
          "additionalProperties": false,
          "properties": {
            "attested_by": {
              "type": "string",
              "description": "Who attests (name + capacity, e.g. 'A. Director, director of the applicant')"
            },
            "attested_at": {
              "type": "string"
            },
            "statement_ref": {
              "type": "string",
              "description": "Reference/hash of the signed truth statement"
            }
          }
        },
        "conformance_level": {
          "description": "L1 = declared-only. L2 = verify-core: no verify-tagged field present in the pack carries a self-declared value (not_collected is permitted — it is the honest absence marker), and at least one verified fact exists. L3 = L2 + attested with attestation object + oven-ready. Enforced by the reference validator.",
          "enum": [
            "L1-declared",
            "L2-verified-core",
            "L3-attested"
          ]
        },
        "missing": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        }
      }
    }
  }
}
← Reference data Reference validator →

Reference validator

schema/validate.py · requires jsonschema (hard dependency: validation fails with an explicit error when it is absent)

validate(pack, catalogue) → list[str] returns the pack's conformance errors. An empty list means the pack conforms. The validator applies five check layers:

  1. Structure — Draft 2020-12 validation against the schema document.
  2. Catalogue — every section.field exists in the catalogue (or is an x_-prefixed extension field, which is permitted and skipped); provenance kind is compatible with the field's tag; a verified fact's source matches the catalogue's named source; an enum field's value is a code in its bound code list; every non-null value matches its catalogue datatype (ratio = 0–1 decimal fraction); instance names follow the canonical grammar (e.g. guarantor:2, not guarantor-2); readiness.missing entries reference real fields; repeatable-section instances (guarantor:2, …) are legal only for sections the catalogue marks repeatable, with integer suffixes from :2.
  3. Readiness — the status and the missing list must agree; conformance-level rules apply (L2/L3 forbid self-declared verify-fields and require ≥1 verified fact; L3 requires attested + oven-ready); attestation substance (non-empty truth statement + {attested_by, attested_at}).
  4. Entity gate — oven-ready / attested / L2+ require a corporate form; entity vs business_identity legal-form consistency.
  5. Requirement profiles — the pack's the_ask.facility_type selects the per-product profile (see Lending coverage); every required field is provided or listed in missing.

Usage

Also exported: validate_disposition(msg, catalogue) (funder dispositions), validate_bbc(msg) (borrowing-base certificates — arithmetic enforced), canonical_json / pack_ref (pack identity hashing), check_artifacts (the standard's own files cross-validated), and run_vectors — runs the 30 published conformance vectors. The vector file therefore cannot drift from the rules.

# self-check: 2 packs (reference AND strict schema) + a disposition
#            + artifact cross-validation + 31 negative cases
cd docs/deal-schema/schema
python validate.py

# programmatic
from validate import validate, stale_facts
errors = validate(pack, catalogue)          # [] == conforming
stale  = stale_facts(pack, "2026-07-17", max_age_days=90)

stale_facts is intentionally outside validate(). Validation is clock-free: the caller supplies "today".

← JSON Schema Example packs →

Example packs

This page provides five example packs. All five pass validation. Implementations can use them as test cases as well as documentation. Company identifiers are fictitious.

1 · oven-ready (L3-attested)

All baseline required fields are provided. Identity is verified against Companies House. An attestation is present. missing is empty.

{
  "standard": "lending-deal-package-readiness",
  "schema_version": "0.5.0",
  "catalogue_version": "0.11.0",
  "entity": {
    "legal_form": "ltd",
    "jurisdiction": "GB"
  },
  "producer": {
    "name": "Example Origination Ltd",
    "role": "origination platform",
    "fca_status": "appointed_representative",
    "fca_frn": "000000",
    "principal_name": "Example Principal Ltd",
    "contact": "[email protected]"
  },
  "sections": {
    "business_identity": {
      "company_name": {
        "value": "Example Trading Ltd (synthetic)",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "via": "GET /company/00000000",
          "date": "2026-07-13"
        }
      },
      "company_number": {
        "value": "00000000",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "date": "2026-07-13"
        }
      },
      "legal_form": {
        "value": "ltd",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "date": "2026-07-13"
        }
      },
      "company_status": {
        "value": "active",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "date": "2026-07-13"
        }
      },
      "lei": {
        "value": null,
        "provenance": {
          "kind": "not_collected",
          "label": "LEI (optional for SME packs)"
        }
      },
      "trading_name": {
        "value": "Example Trading",
        "provenance": {
          "kind": "self-declared"
        }
      }
    },
    "financials": {
      "turnover": {
        "value": 1250000,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "accounts_overdue": {
        "value": "on time",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "date": "2026-07-13"
        }
      },
      "statutory_accounts": {
        "value": "accounts-2025.pdf",
        "provenance": {
          "kind": "document",
          "checked": true,
          "ref": "r2://cases/1/statutory/uuid_accounts.pdf"
        }
      }
    },
    "banking": {
      "bank_statements": {
        "value": "6mo-statements.pdf",
        "provenance": {
          "kind": "document",
          "checked": true,
          "ref": "r2://cases/1/bank/uuid_statements.pdf"
        }
      },
      "monthly_credit_turnover": {
        "value": 104000,
        "provenance": {
          "kind": "verified",
          "source": "open_banking",
          "date": "2026-07-12"
        }
      },
      "dscr": {
        "value": 1.6,
        "provenance": {
          "kind": "verified",
          "source": "open_banking",
          "date": "2026-07-12"
        }
      }
    },
    "people": {
      "active_officers": {
        "value": "A. Director, B. Director (2 active officers)",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "date": "2026-07-13"
        }
      },
      "director_disqualified": {
        "value": "none disqualified",
        "provenance": {
          "kind": "verified",
          "source": "disqualified_directors_register",
          "date": "2026-07-13"
        }
      },
      "sanctions_pep": {
        "value": "clear",
        "provenance": {
          "kind": "verified",
          "source": "sanctions_screen",
          "date": "2026-07-13"
        }
      }
    },
    "guarantor": {
      "guarantee_required": {
        "value": true,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "guarantee_type": {
        "value": "personal",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "guarantee_amount": {
        "value": 50000,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "guarantor_name": {
        "value": "A. Director",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "personal_financial_statement": {
        "value": "pfs-413.pdf",
        "provenance": {
          "kind": "document",
          "checked": true
        }
      },
      "guarantor_net_worth": {
        "value": 180000,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "guarantor_sanctions_pep": {
        "value": "clear",
        "provenance": {
          "kind": "verified",
          "source": "sanctions_screen",
          "date": "2026-07-13"
        }
      }
    },
    "the_ask": {
      "amount": {
        "value": 75000,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "purpose": {
        "value": "new fit-out and equipment",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "candidate_products": {
        "value": "asset finance, secured term loan",
        "provenance": {
          "kind": "verified",
          "source": "structuring_need_map",
          "date": "2026-07-13"
        }
      },
      "term_months": {
        "value": 48,
        "provenance": {
          "kind": "self-declared"
        }
      }
    },
    "declarations": {
      "truth_statement": {
        "value": "I confirm the information in this pack is true and complete — signed 2026-07-13",
        "provenance": {
          "kind": "self-declared"
        }
      }
    }
  },
  "readiness": {
    "status": "oven-ready",
    "attested": true,
    "attestation": {
      "attested_by": "A. Director, director of the applicant",
      "attested_at": "2026-07-13",
      "statement_ref": "sha256:9f2c...truth-statement"
    },
    "conformance_level": "L3-attested",
    "missing": []
  }
}

2 · mid-verification (L2, gaps-remaining)

The pack has a verified core with one required document outstanding. The outstanding document is recorded as not_collected. The same field is listed in missing.

{
  "standard": "lending-deal-package-readiness",
  "schema_version": "0.5.0",
  "catalogue_version": "0.11.0",
  "entity": {
    "legal_form": "ltd",
    "jurisdiction": "GB"
  },
  "sections": {
    "business_identity": {
      "company_name": {
        "value": "Midway Trading Ltd",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "date": "2026-07-15"
        }
      },
      "company_number": {
        "value": "01234567",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "date": "2026-07-15"
        }
      },
      "legal_form": {
        "value": "ltd",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "date": "2026-07-15"
        }
      }
    },
    "financials": {
      "statutory_accounts": {
        "value": "accounts-2025.pdf",
        "provenance": {
          "kind": "document",
          "checked": true
        }
      }
    },
    "banking": {
      "bank_statements": {
        "value": null,
        "provenance": {
          "kind": "not_collected",
          "label": "awaiting borrower upload"
        }
      }
    },
    "the_ask": {
      "amount": {
        "value": 120000,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "purpose": {
        "value": "premises expansion",
        "provenance": {
          "kind": "self-declared"
        }
      }
    },
    "declarations": {
      "truth_statement": {
        "value": "attested by the applicant",
        "provenance": {
          "kind": "self-declared"
        }
      }
    }
  },
  "readiness": {
    "status": "gaps-remaining",
    "attested": true,
    "attestation": {
      "attested_by": "A. Director, Midway Trading Ltd",
      "attested_at": "2026-07-15"
    },
    "conformance_level": "L2-verified-core",
    "missing": [
      "banking.bank_statements"
    ]
  }
}

3 · early-stage (L1-declared)

Most fields are uncollected. The pack contains only applicant-stated facts. The producer claims nothing it cannot support.

{
  "standard": "lending-deal-package-readiness",
  "schema_version": "0.5.0",
  "catalogue_version": "0.11.0",
  "entity": {
    "legal_form": "ltd",
    "jurisdiction": "GB"
  },
  "sections": {
    "business_identity": {
      "company_name": {
        "value": null,
        "provenance": {
          "kind": "not_collected",
          "label": "awaiting Companies House verification"
        }
      },
      "legal_form": {
        "value": null,
        "provenance": {
          "kind": "not_collected"
        }
      }
    },
    "the_ask": {
      "amount": {
        "value": 40000,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "purpose": {
        "value": "working capital",
        "provenance": {
          "kind": "self-declared"
        }
      }
    }
  },
  "readiness": {
    "status": "gaps-remaining",
    "attested": false,
    "conformance_level": "L1-declared",
    "missing": [
      "business_identity.company_name",
      "business_identity.company_number",
      "business_identity.legal_form",
      "financials.statutory_accounts",
      "banking.bank_statements",
      "declarations.truth_statement"
    ]
  }
}

4 · repeating groups (two guarantors)

A second guarantor appears as an instance section (guarantor:2). One guarantor's ID document is checked. The other guarantor's ID document is still outstanding and is listed under its instance in missing.

{
  "standard": "lending-deal-package-readiness",
  "schema_version": "0.5.0",
  "catalogue_version": "0.11.0",
  "entity": {
    "legal_form": "ltd",
    "jurisdiction": "GB"
  },
  "sections": {
    "business_identity": {
      "company_name": {
        "value": "Two Guarantor Trading Ltd",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "via": "api",
          "date": "2026-07-10"
        }
      },
      "company_number": {
        "value": "00000000",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "via": "api",
          "date": "2026-07-10"
        }
      },
      "legal_form": {
        "value": "ltd",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "via": "api",
          "date": "2026-07-10"
        }
      }
    },
    "the_ask": {
      "amount": {
        "value": 250000,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "purpose": {
        "value": "Working capital",
        "provenance": {
          "kind": "self-declared"
        }
      }
    },
    "declarations": {
      "truth_statement": {
        "value": "I confirm the information in this pack is true to the best of my knowledge.",
        "provenance": {
          "kind": "self-declared"
        }
      }
    },
    "guarantor": {
      "guarantee_required": {
        "value": true,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "guarantee_type": {
        "value": "personal",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "guarantor_name": {
        "value": "A. Director",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "guarantor_id": {
        "value": "doc-101",
        "provenance": {
          "kind": "document",
          "checked": true
        }
      }
    },
    "guarantor:2": {
      "guarantee_type": {
        "value": "personal",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "guarantor_name": {
        "value": "B. Director",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "guarantor_id": {
        "value": null,
        "provenance": {
          "kind": "not_collected",
          "label": "Photo ID (second guarantor)"
        }
      }
    }
  },
  "readiness": {
    "status": "gaps-remaining",
    "attested": false,
    "conformance_level": "L1-declared",
    "missing": [
      "financials.statutory_accounts",
      "banking.bank_statements",
      "guarantor:2.guarantor_id"
    ]
  }
}

5 · sharia overlay (murabaha, S2-structure-evidenced)

The sharia overlay is active. The structure evidence for a murabaha is present and the recorded dates are in order. Two baseline documents remain outstanding and are listed in missing.

{
  "standard": "lending-deal-package-readiness",
  "schema_version": "0.5.0",
  "catalogue_version": "0.11.0",
  "entity": {
    "legal_form": "ltd",
    "jurisdiction": "GB"
  },
  "sections": {
    "business_identity": {
      "company_name": {
        "value": "Halal Equipment Trading Ltd",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "via": "api",
          "date": "2026-07-10"
        }
      },
      "company_number": {
        "value": "00000000",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "via": "api",
          "date": "2026-07-10"
        }
      },
      "legal_form": {
        "value": "ltd",
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "via": "api",
          "date": "2026-07-10"
        }
      },
      "sic_codes": {
        "value": [
          "70229"
        ],
        "provenance": {
          "kind": "verified",
          "source": "companies_house",
          "via": "api",
          "date": "2026-07-10"
        }
      }
    },
    "the_ask": {
      "amount": {
        "value": 44000,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "purpose": {
        "value": "Equipment purchase via murabaha",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "finance_basis": {
        "value": "sharia_compliant",
        "provenance": {
          "kind": "self-declared"
        }
      }
    },
    "declarations": {
      "truth_statement": {
        "value": "I confirm the information in this pack is true to the best of my knowledge.",
        "provenance": {
          "kind": "self-declared"
        }
      }
    },
    "sharia_compliance": {
      "sharia_structure": {
        "value": "murabaha",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "claimed_level": {
        "value": "S2-structure-evidenced",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "late_payment_charity_clause": {
        "value": "doc-201",
        "provenance": {
          "kind": "document",
          "checked": true
        }
      },
      "disclosed_cost": {
        "value": 40000,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "disclosed_markup": {
        "value": 4000,
        "provenance": {
          "kind": "self-declared"
        }
      },
      "ownership_transfer_date": {
        "value": "2026-07-01",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "sale_contract_date": {
        "value": "2026-07-03",
        "provenance": {
          "kind": "self-declared"
        }
      },
      "ownership_transfer_evidence": {
        "value": "doc-202",
        "provenance": {
          "kind": "document",
          "checked": true
        }
      },
      "sale_contract": {
        "value": "doc-203",
        "provenance": {
          "kind": "document",
          "checked": true
        }
      }
    }
  },
  "readiness": {
    "status": "gaps-remaining",
    "attested": false,
    "conformance_level": "L1-declared",
    "missing": [
      "financials.statutory_accounts",
      "banking.bank_statements"
    ]
  }
}
← Reference validator Producing packs →

Producing packs

This page covers producing a conforming pack. The reference producer is AskVouch's case engine. The engine's internal deal pack is mapped to the standard by dealpack/export_standard.py::to_standard_pack. A CI round-trip test checks that a real assembled pack validates against the published schema, catalogue and validator.

HTTP surface

POST /broker/cases/{id}/pack?format=standard
→ 200 { "ok": true,
        "format": "lending-deal-package-readiness/v0.4.0",
        "pack": { ...conforming pack... } }

POST /broker/cases/{id}/pack            # default: the PDF rendering

Producer requirements

The exporter's mapping rules apply to any producer:

  • A producer emits sections as a map {section_id → {field_id → {value, provenance}}}. All internal display metadata is stripped.
  • readiness.missing derives from the catalogue's required_fields. A required field whose value is null/absent is a gap.
  • The conformance level derives from what the pack actually contains, not from the level a producer claims. L2 requires no self-declared verify-fields and at least one verified fact. L3 also requires a substantive attestation and no required gaps.
  • The entity gate applies to every producer: a non-corporate applicant is never oven-ready in v0. The producer emits gaps-remaining and records the gap as business_identity.legal_form in missing[].
  • business_identity.legal_form is normalised to the standard enum so that it agrees with entity.legal_form.
  • A producer never fabricates: anything not established is not_collected.
← Example packs Artifacts & downloads →

Artifacts & downloads

This page serves the standard's machine-readable artifacts directly. The set covers everything an implementer needs to produce, validate, or consume conforming packs without access to any repository. Schemas and code are licensed Apache-2.0. Documentation is licensed CC-BY-4.0 (LICENSE · LICENSE-docs · NOTICE — upstream attributions).

Normative artifacts

artifactwhat it is
field-catalogue.v0.jsonThe data dictionary — 15 sections, 220 fields (v0.15.0)
code-lists.v0.json17 versioned enumerations
requirement-profiles.v0.jsonPer-product required evidence + readiness modes
reference-data.v0.jsonThe registries verified facts cite
deal-package.schema.jsonPack shape (JSON Schema 2020-12, v0.4.0)
deal-package.strict.schema.jsonGenerated schema with the full field vocabulary inlined — for consumers that can only run standard JSON Schema tools
disposition.schema.jsonThe funder's response message (v0.2.0)
borrowing-base-certificate.schema.jsonThe continuous-mode recurring certificate (v0.1.0)
CHARTER.mdThe interim governance charter: decision rights, change control, transfer criteria
PATENTS.mdThe patent non-assertion pledge

Tooling & test vectors

artifactwhat it is
validate.pyThe reference validator (structure, catalogue, datatypes, readiness, gates, profiles, instances, dispositions, certificates, pack identity)
generate_strict_schema.pyRegenerates the strict schema from the catalogue
conformance-vectors.v0.json30 published test vectors (4 valid, 26 invalid, each with the expected error) for checking an independent validator
example-pack.ready.jsonOven-ready, at conformance ladder level L3-attested
example-pack.mid.jsonVerified core, one document outstanding
example-pack.gaps.jsonEarly-stage, declared-only
example-pack.multi.jsonRepeating groups — two guarantor instances
example-pack.sharia.jsonSharia overlay — murabaha at ladder level S2 (structure evidenced)

Diagram sources (mermaid)

entity model · lifecycle · exchange sequence · C4 context · architecture

Five-minute start

A=https://askvouch.com/dev/artifacts
for f in field-catalogue.v0.json code-lists.v0.json requirement-profiles.v0.json \
         reference-data.v0.json deal-package.schema.json deal-package.strict.schema.json \
         disposition.schema.json borrowing-base-certificate.schema.json \
         conformance-vectors.v0.json validate.py generate_strict_schema.py; do
  curl -sO $A/$f; done
mkdir -p examples
for f in ready gaps mid multi sharia; do
  curl -so examples/example-pack.$f.json $A/example-pack.$f.json; done

pip install jsonschema
python validate.py   # self-check: examples (both schemas), all published vectors, 31 negatives
← Producing packs Crosswalks →

Crosswalks

A crosswalk is a concept-level field mapping to an adjacent standard. The framework publishes crosswalks only where licences permit. Crosswalks to member-licensed industry standards are not published. A field-level mapping would inevitably copy their member-licensed identifiers and structure. That route requires their involvement (see Governance). The mappings below are indicative until we verify the source licence terms.

FIBO (Financial Industry Business Ontology)

Source: FIBO (Financial Industry Business Ontology) — EDM Council / OMG, MIT licence
Status: concept-level v0 — FIBO IRIs indicative, verify against fibo published ontologies (Std-1)

Direction: our field -> the FIBO concept it corresponds to. FIBO models parties/entities/contracts richly; we borrow the legal-entity + party-role + LEI model.
fieldmaps toconfidence
business_identity.company_namefibo-fnd-aap-ppl / fibo-be-le-lp: LegalEntity hasLegalNamehigh
business_identity.company_numberfibo-fnd-rel-rel: registrationIdentifier of the LegalEntity (jurisdictional company number)high
business_identity.legal_formfibo-be-le-lp: LegalPersonType / business legal formhigh
business_identity.company_statusfibo-be-le-lp: entity lifecycle / registration statusmedium
business_identity.incorporation_datefibo-be-le-lp: dateOfRegistration / formation datehigh
business_identity.sic_codesfibo-be-le-lp: industry classification (SIC/NAICS analogue)medium
business_identity.leifibo-fnd-arr-id: LegalEntityIdentifier (LEI, ISO 17442)high
people.active_officersfibo-fnd-org-fm / fibo party-in-role: appointed officers / directors of the organisationmedium
people.director_disqualifiedno direct FIBO concept — a jurisdictional register check (UK disqualified-directors); model as a party-role status assertionlow
people.sanctions_pepno direct FIBO concept — screening result; model as an assessment/finding on the partylow
guarantor.guarantor_namefibo party-in-role: Guarantor (natural person party playing the guarantor role)high
guarantor.guarantee_typefibo-fbc-dae-dbt: guarantee / surety arrangement typemedium
guarantor.guarantee_amountfibo-fnd-acc-cur: MonetaryAmount of the guaranteehigh
guarantor.guarantor_net_worthfibo-fnd-acc: net-worth / financial position of the partymedium
security_assets.charges_registerfibo-fbc-dae-dbt: liens / security interests over the entitymedium
the_ask.amountfibo-fbc-dae-dbt: requested LoanAmount / MonetaryAmounthigh
the_ask.candidate_productsfibo-fbc-dae-dbt: credit facility / loan product typesmedium
readiness.*NO EQUIVALENT — the provenance + readiness + conformance layer is this standard's contribution; FIBO has no per-fact source-of-truth or oven-ready modeln/a
*.provenanceNO EQUIVALENT — see readiness noten/a

SBA Forms 1919 / 413

Source: US Small Business Administration — Form 1919 (Borrower Information, rev. 2023), Form 413 (Personal Financial Statement). US-government works, public domain (17 U.S.C. s.105).
Status: concept-level v0 — SBA line references indicative, verify against current SBA forms (Std-1)

Direction: our field -> the SBA form + section it corresponds to. SBA is US small-business lending; jurisdiction differs (UK), but the CONTENT (borrower principals, personal financial statement) is directly transplantable. 1920 (lender) retired 2023.
fieldmaps toconfidence
business_identity.company_name1919 §I — Applicant business legal namehigh
business_identity.company_number1919 §I — business identifier (EIN analogue; UK: company number)medium
business_identity.legal_form1919 §I — business type/structurehigh
the_ask.amount1919 — loan amount requestedhigh
the_ask.purpose1919 — use of proceedshigh
people.active_officers1919 §II — principals / owners / key persons (>=20% or control)high
people.director_id1919 §II — principal identity fieldsmedium
people.sanctions_pep1919 §II — character/eligibility questions (analogue; not a screening result)low
guarantor.guarantee_required1919 — guaranty requirement for principalshigh
guarantor.guarantor_name413 — 'Complete this form for: ' (guarantor/principal named)high
guarantor.personal_financial_statement413 — THE whole form (assets, liabilities, income, contingent liabilities)high
guarantor.guarantor_net_worth413 — 'Net Worth' (Total Assets minus Total Liabilities)high
guarantor.guarantor_homeowner413 — Section 2 (Real Estate Owned) + Assets (residence)high
financials.turnover1919 / business financials — annual revenuemedium
readiness.*NO EQUIVALENT — SBA forms are static intake; no per-fact provenance or machine-readable readiness verdictn/a
*.provenanceNO EQUIVALENT — see readiness noten/a
← Artifacts & downloads Regulatory notes →

Regulatory notes

This page describes the regulatory duties that implementers of the standard carry. The standard is a data structure. It does not create a lawful basis. It is regulation-aware: it flags legal duties but does not create or satisfy them. None of this is legal advice.

UK regulated-credit perimeter

  • Lending to sole traders and small partnerships can be a regulated credit agreement (RAO art 60B, subject to the art 60C exemptions; partnerships via art 60L). v0 excludes regulated agreements. The corporate-only entity gate keeps readiness claims outside that scope; assembling or introducing non-corporate cases remains the implementer's own perimeter analysis.
  • Introducing borrowers to lenders is credit broking (RAO art 36A) — an FCA-regulated activity. A firm needs FCA permission, or can act as an Appointed Representative under FSMA s.39. Under that arrangement, a principal firm takes regulatory responsibility for the representative's conduct (SUP 12; PS22/11 oversight duties).

Data protection (UK GDPR)

  • Packs carry personal data: director and guarantor identity, personal financials, screening results. Catalogue fields are marked data_class: personal.
  • Each party assembling or receiving a pack is a controller in its own right and must establish lawful basis, minimisation, retention, and security independently.
  • A DPIA (data protection impact assessment) is likely required for packs that include a guarantor.

Financial crime (MLRs)

  • Sanctions/PEP results in a pack are informational. They do not replace the receiving firm's own customer due diligence under MLR 2017. Reliance on another firm's checks requires an explicit regulation-39 arrangement.

Guarantors

  • A guarantor is a natural person. Where the underlying agreement is regulated, implementers must meet the Consumer Duty, the CONC guarantor provisions, and the rules on vulnerable customers.
  • A guarantee secured on a dwelling can trigger the regulated-mortgage analysis. The guarantor.ila_confirmation field records evidence of independent legal advice.
← Crosswalks Participate →

Participate

This page describes how to take part in the standard. The standard is open: schemas and code are Apache-2.0, documentation is CC-BY-4.0, and every artifact is downloadable from this site. The standard improves when parties other than its authors implement it. The first funder that accepts a pack and returns a disposition proves the standard in practice.

Implementers

Implementers produce packs from their own origination systems or consume them in their own credit checks (gates). The starting points are the artifacts, the reference architecture, and Producing packs. The strict schema and the conformance vectors are built for independent implementation. The maintainers treat ambiguous or wrong spec passages as reportable findings.

Funders

For credit teams states what a funder receives, what it still carries, and how a pilot runs.

Funder credit teams can receive conforming packs: per-fact provenance, a readiness verdict their gates can act on, and structured dispositions in return. The maintainers are shaping requirement profiles with early funders now, privately.

Contact

[email protected] is the contact address. Implementation questions, spec findings, funder conversations, and governance interest all reach the maintainers there. The maintainers intend to hand stewardship to a recognised industry or national standards body (see Governance). Interest in taking part in that process goes to the same address.

← Regulatory notes Governance, IP & licensing →

Governance, IP & licensing

Stewardship

v0 is stewarded by AskVouch as the reference implementation. The maintainers intend to contribute the protocol, open-source, to a neutral standards home once the standard has committed industry participants. A neutral standards home is a recognised industry or national standards body. Governance is deliberately left open for the industry to shape. Alternatives remain open: a neutral foundation, or an existing standards body sponsoring a lending profile.

Interim charter

The interim governance charter states how decisions are made before stewardship transfers. It covers decision rights, the change-control process, the licences, the conformance position of the reference implementation, the transfer criteria, and the maintainers' conflict of interest. Implementers running a conforming producer or consumer may request a standing seat in the review of normative changes.

Change control and comment windows

  • A proposed normative change is published as a draft with a version number and a dated comment window of at least 21 days.
  • Comments go to [email protected]. Comments and their disposition are recorded in the changelog entry for the release.
  • Every release states whether it is additive or breaking. Breaking changes carry a migration note.
  • Requirement profiles follow this process. Profiles shaped with individual funders are published as drafts and go through the same window before they are treated as normative.
  • Editorial fixes, security fixes and corrections of factual errors ship immediately and are marked as such.

Patents

Copyright licences alone do not tell an implementer where they stand on patents. The patent non-assertion pledge does. The maintainers pledge not to assert patent claims they own or control against conforming implementations, with a defensive-suspension condition, and will require any successor steward to maintain a pledge at least as permissive. The maintainers hold no patents or applications covering the standard's normative artifacts.

Licences

artifactlicence
JSON Schema, catalogue, validator, crosswalks, codeApache-2.0
Specification prose and documentationCC-BY-4.0
Upstream attributionsNOTICE (FIBO — MIT; SBA — US-gov public domain; others as verified)

Conflict of interest

The maintainers operate a commercial product that consumes this standard. Two safeguards apply. The artifacts are licensed so that a competitor can implement them fully without permission. No normative change may require a feature that only the reference implementation can provide. The reference implementation runs the same published conformance vectors as any other implementation.

IP process

Content is drawn only from public-domain / open sources (SBA forms, FIBO, UK Open Banking). We consult member-licensed industry standards only as checklists of concepts to cover. We copy no schema file, field dictionary or datapoint identifier. We keep a per-concept provenance log and a blocking licence-verification log (ip-process.md).

Contributing

CONTRIBUTING.md defines the contribution requirements. All changes must pass the reference validator and the producer round-trip. New fields need catalogue entries and a requirement-profile decision. Borrowed fields also need a provenance-log row and a NOTICE entry.

← Participate