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.
Field
Meaning
ball_with
Exactly one of borrower | machine | broker |
lender — whose court the case sits in.
completeness
How much of the required checklist is
satisfied.
staleness_days
Whole 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.
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.
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.
ContactChannelAdapter — how the borrower is reached. Email routes through
a single suppression and unsubscribe choke point.
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
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
layer
role
status
Agent platform
The 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 contract
The 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 side
Consumes 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
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
artifact
what it is
The deal package
A 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.
A 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 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
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.
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.
Receive live packs and reply with dispositions. This closes the loop and is the point
at which the standard is proven in practice.
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:
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)
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.
Rule-timed, templated, audited follow-up on missing items; replies route back onto the case automatically
chase engine (rule-based timing for when items fall due + templated emails, never AI-generated)
Attest
Warranty questionnaire + signed truth statement; the basis of the pack's attestation
declarations module
Package
Assembles the canonical pack with per-fact provenance; evaluates readiness against the requirement profile; renders the outputs
pack assembler · standard exporter · PDF renderer
Deliver
Delivers the pack to the funder as a human-readable PDF or as the machine-readable standard JSON
POST /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).
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.
capability
what it does
component in AskVouch
protocol artifact
Identify
Resolve the applicant against public registries — number, status, officers, LEI
verification adapters
verified identity facts
Gather
Determine required evidence (requirement profile) and collect it from the applicant
case checklist engine · borrower portal · email front-door
declared + document-backed fields
Verify
Check facts against named sources; deterministic document checks
registry adapters · local-only doc checking
verified provenance
Chase
Schedule and send reminders for gaps; route replies back to the case
chase engine
chase items driven by missing[] and by funder info_requested
Assemble
Build the pack; stamp per-fact provenance; never fabricate (not_collected)
pack assembler + standard exporter
the conforming pack
Attest
Capture declarations and the attestation (who, in what capacity, when)
declarations flow
attestation object
Submit
Hand the pack and its one-page summary to the funder
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 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 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.
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 field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_accounts
Last filed statutory accounts (PDF)
doc
banking.bank_statements
Last 6 months' business bank statements
doc
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
term-loan-v0
applies to: term_loanrevolving_credit_facilityoverdraft ·
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 field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_accounts
Last filed statutory accounts (PDF)
doc
banking.bank_statements
Last 6 months' business bank statements
doc
security_assets.security_offered
Security offered (unsecured / secured / asset)
declare
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
asset-finance-v0
applies to: asset_finance_hpasset_finance_leasesale_and_leaseback ·
mode one_shot · status v0
Asset-secured products: the asset schedule is the credit.
required field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_accounts
Last filed statutory accounts (PDF)
doc
banking.bank_statements
Last 6 months' business bank statements
doc
security_assets.asset_schedule
Asset schedule (asset finance)
declare
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
invoice-finance-v0
applies to: invoice_discountingfactoring ·
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 field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_accounts
Last filed statutory accounts (PDF)
doc
banking.bank_statements
Last 6 months' business bank statements
doc
receivables.aged_debtor_ledger
Aged receivables ledger
doc
receivables.debtor_concentration
Top-debtor concentration
declare
receivables.sample_invoices
Sample invoices + delivery evidence
doc
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
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 field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_address
Property address (if secured on property)
declare
security_assets.valuation_report
Property valuation (RICS report)
doc
development.gdv
Gross development value (GDV)
declare
development.total_build_costs
Total build costs (incl. contingency)
declare
development.drawdown_schedule
Staged drawdown schedule
doc
development.planning_permission
Planning permission evidence
doc
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
development.development_appraisal
Development appraisal
doc
the_ask.exit_strategy
Exit strategy
declare
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 field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_accounts
Last filed statutory accounts (PDF)
doc
capital_structure.existing_debt_schedule
Existing debt schedule
declare
capital_structure.senior_facility_terms
Senior facility agreement / term sheet
doc
capital_structure.ebitda
EBITDA (trailing 12 months)
declare
capital_structure.enterprise_valuation
Enterprise valuation
doc
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
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 field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_address
Property address (if secured on property)
declare
security_assets.valuation_report
Property valuation (RICS report)
doc
the_ask.exit_strategy
Exit strategy
declare
the_ask.exit_evidence
Exit evidence
doc
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
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 field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_accounts
Last filed statutory accounts (PDF)
doc
banking.bank_statements
Last 6 months' business bank statements
doc
trade_finance.trade_direction
Trade direction
declare
trade_finance.supplier_details
Key supplier details
declare
trade_finance.purchase_orders
Confirmed purchase orders
doc
trade_finance.trade_cycle_days
Trade cycle (days)
declare
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
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 field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_statements
Last 6 months' business bank statements
doc
card_receipts.acquirer_name
Card acquirer
declare
card_receipts.acquirer_statements
Acquirer statements
doc
card_receipts.monthly_card_turnover
Average monthly card turnover
declare
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
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 field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_accounts
Last filed statutory accounts (PDF)
doc
banking.bank_statements
Last 6 months' business bank statements
doc
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
receivables.aged_debtor_ledger
Aged receivables ledger
doc
receivables.debtor_concentration
Top-debtor concentration
declare
inventory.stock_on_hand_value
Stock on hand (value at cost)
verify
inventory.stock_count_date
Stock count date
verify
inventory.nolv_rate
Net orderly liquidation value (NOLV) rate
declare
inventory.stock_locations
Stock locations
declare
inventory.stock_insurance
Stock insured
declare
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 field
label
tag
business_identity.company_name
Registered company name
verify
business_identity.company_number
Company number
verify
business_identity.legal_form
Legal 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_accounts
Last filed statutory accounts (PDF)
doc
banking.bank_statements
Last 6 months' business bank statements
doc
the_ask.amount
Amount requested
declare
the_ask.purpose
What the money is for
declare
declarations.truth_statement
Truth statement signed
declare
inventory.stock_on_hand_value
Stock on hand (value at cost)
verify
inventory.stock_count_date
Stock count date
verify
inventory.stock_valuation_basis
Stock valuation basis
declare
inventory.nolv_rate
Net orderly liquidation value (NOLV) rate
declare
inventory.stock_appraisal
Stock appraisal / NOLV report
doc
inventory.stock_locations
Stock locations
declare
inventory.stock_insurance
Stock insured
declare
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.
Pack structure
A pack is a single JSON object with six top-level members:
member
type
req.
meaning
standard
const
●
"lending-deal-package-readiness"
schema_version
semver string
●
Pack-shape version (this release: 0.5.0)
catalogue_version
semver string
●
Field-catalogue version the pack was assembled against (required since v0.4)
entity
object
●
{ legal_form, jurisdiction } — see the entity gate under Readiness
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:
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.
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.
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 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
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.
Per-structure evidence. The chosen sharia_structure selects its evidence
set (below) — the way facility_type selects a requirement profile.
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.
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.
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
structure
meaning
required evidence (beyond the base overlay)
murabaha
Murabaha (cost-plus sale — funder buys, owns, sells at disclosed cost + markup)
Other (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.
S2 + 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.
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.
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.
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
Identity — applicant name, company number, legal form, jurisdiction; the entity-gate
statement when the pack claims readiness (corporate-only, v0).
The ask — amount, purpose, facility type (label, not code).
The verdict — readiness status, conformance level (L1/L2/L3), and the requirement
profile that was applied.
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.
The missing list — every readiness.missing entry with its field label,
instance-qualified where applicable.
Attestation — attested or not; when attested: who (name + capacity) and when.
Standard + versions — standard name, schema_version,
catalogue_version, and the pack content hash where computed (the natural
pack_ref for dispositions).
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
verified
declared
document
not collected
Business identity
4
1
—
1
Financials
1
1
1
—
Banking
2
—
1
—
People
3
—
—
—
Guarantor & personal financials
1
5
1
—
The ask
1
3
—
—
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.
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
verified
declared
document
not collected
Business identity
3
—
—
—
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.
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.
term
meaning
deal package (pack)
The machine-readable representation of a funding case: sections of facts, each fact carrying value + provenance, plus a readiness verdict.
provenance
How 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 verdict
The 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 ladder
L1-declared (applicant-stated) → L2-verified-core (no self-declared values on verify-tagged fields, ≥1 verified fact) → L3-attested (L2 + attested + oven-ready).
attestation
The 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 gate
The 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 profile
The 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 mode
one_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 / instance
A repeatable section that appears multiple times: guarantor, guarantor:2, and so on. Each instance carries its own per-fact provenance.
disposition
The funder's machine-readable response to a pack: received / in_review / info_requested / declined / offer_issued. See Disposition messages.
A producer-specific field prefixed x_ — shape-checked, ignored by conformance scoring.
personal guarantee
A 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.
debenture
A charge over a company's assets generally (fixed and floating) securing a facility — visible in the pack via the charges register.
borrowing base
The 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-ready
The 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 basis
The 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).
murabaha
Cost-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.
ijara
Lease-based finance: the funder owns and insures the asset and leases it — ownership risk stays with the funder.
diminishing musharaka
Co-ownership with a progressive buyout: the customer acquires the funder's share over time, paying rent on the remainder.
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.
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.
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.
kind
meaning
members
verified
Checked against a named source
source (required) · via · date · expires_at · evidence_ref
self-declared
Stated by the applicant
—
document
Backed by an uploaded document
checked · ref · label
not_collected
Not yet provided — an open admission that the fact is missing
label
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 tag
permitted provenance kinds
verify
verified, not_collected
declare
self-declared, not_collected
doc
document, 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.
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
level
requirements (validator-enforced)
L1-declared
Applicant-stated information; no further requirements.
L2-verified-core
No 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-attested
L2 + 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.
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
field
type
tag
source
class
req.
company_name
string
verify
companies_house
—
●
The entity's registered legal name as recorded at Companies House (not a trading name).
company_number
string
verify
companies_house
—
●
The Companies House registration number (8 characters, incl. SC/NI/OC prefixes).
The applicant's legal form, normalised to the legal_form code list.
company_status
string
verify
companies_house
—
The registrar's current status for the entity (e.g. active, dissolved, liquidation).
incorporation_date
date
verify
companies_house
—
The date the entity was incorporated/registered.
sic_codes
list_string
verify
companies_house
—
UK SIC 2007 classification codes recorded for the entity (see reference-data: sic_codes).
lei
string
verify
gleif
—
ISO 17442 20-character Legal Entity Identifier, where the entity holds one (optional for SME packs).
trading_name
string
declare
—
—
The name the business trades under when it differs from the registered name.
website
url
declare
—
—
The business's primary public website.
registered_address
text
verify
companies_house
—
The registered office address as recorded at the company registry.
trading_address
text
declare
—
—
The address the business actually trades from, where different from the registered office.
vat_number
string
verify
hmrc_vat
—
UK VAT registration number, checkable against the HMRC VAT registration checker.
employee_count
integer
declare
—
—
Current headcount including working directors.
business_description
text
declare
—
—
What the business does, in the applicant's own words — products, customers, channels.
financials — Financials
field
type
tag
source
class
req.
turnover
monetary_amount
declare
—
—
Revenue for the most recent 12-month period, GBP.
months_trading
integer
declare
—
—
Number of months the business has been trading (may differ from incorporation age).
accounts_overdue
string
verify
companies_house
—
Whether statutory filings are up to date at the registrar ('up to date' / 'overdue').
net_profit
monetary_amount
declare
—
—
Net profit for the most recent financial year, GBP (negative = loss).
statutory_accounts
document_ref
doc
—
—
●
The most recent filed statutory accounts.
management_accounts
document_ref
doc
—
—
Recent management accounts (P&L + balance sheet), no older than 3 months.
cashflow_forecast
document_ref
doc
—
—
Forward cashflow projection covering at least 12 months.
business_plan
document_ref
doc
—
—
The business plan supporting the ask, where the product/amount warrants one.
accounts_reference_date
date
verify
companies_house
—
The made-up-to date of the most recent filed accounts, per the company registry.
aged_creditor_ledger
document_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_days
integer
declare
—
—
Average days the business takes to pay its suppliers.
vat_returns
document_ref
doc
—
—
The last four quarterly VAT returns — a low-friction cross-check on declared turnover.
hmrc_arrears
text
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_history
text
verify
registry_trust
—
CCJs registered against the entity, per the public Register of Judgments, Orders and Fines — satisfied and unsatisfied.
accountant_details
string
declare
—
—
Name and firm of the accountant who prepares the accounts — funders routinely verify accounts provenance with them.
accounting_consent
boolean
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_12m
monetary_amount
verify
accounting_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_12m
monetary_amount
verify
accounting_api
—
Net profit for the trailing 12 months read from the accounting ledger.
accounting_gross_margin
ratio
verify
accounting_api
—
Gross margin as a decimal fraction in [0,1], derived from ledger revenue and cost of sales.
accounting_creditors_total
monetary_amount
verify
accounting_api
—
Total outstanding trade creditors at the sync date — the verified counterpart to the aged creditor ledger upload.
accounting_last_sync
date
verify
accounting_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.
field
type
tag
source
class
req.
bank_provider
string
declare
—
—
The bank holding the business's primary current account.
bank_statements
document_ref
doc
—
—
●
Business bank statements covering the most recent 6 months.
monthly_credit_turnover
monetary_amount
verify
open_banking
—
Average monthly credits into the business account (consented open-banking read), GBP.
existing_repayments
monetary_amount
verify
open_banking
—
Aggregate monthly outflow to existing credit commitments, GBP.
dscr
decimal
verify
open_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_provided
integer
declare
—
—
How many months of business bank statements the pack's bank_statements document covers.
average_monthly_balance
monetary_amount
verify
open_banking
—
Average cleared balance over the statement period, from consented bank data.
returned_items_count
integer
verify
open_banking
—
Count of returned direct debits, bounced payments and unpaid items over the last 6 months — a primary affordability distress signal.
other_banking_relationships
text
declare
—
—
Other business accounts or lenders the business banks with ('none' is a valid answer).
open_banking_consent
boolean
declare
—
—
Whether the applicant has consented to connect account data via open banking for verification.
Unexpired lease term where tenure is leasehold — short unexpired terms constrain lending.
estimated_value
monetary_amount
declare
—
—
The applicant's estimate of the asset's value, pending the valuation_report.
existing_charge_ranking
text
declare
—
—
Charges already registered against this asset and the ranking the new lender is being offered (first, second, …).
ltv_requested
ratio
declare
—
—
Requested facility as a proportion of the asset's estimated value.
asset_make_model
string
declare
—
—
For financed plant/vehicles/equipment: manufacturer and model.
asset_identifier
string
declare
—
—
Serial number, VIN, or registration identifying the specific financed asset.
asset_age_years
integer
declare
—
—
Age of the financed asset — drives residual value and maximum term.
supplier_invoice
document_ref
doc
—
—
The supplier's invoice or quotation for the asset being financed.
outstanding_charges_count
integer
verify
companies_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
field
type
tag
source
class
req.
active_officers
text
verify
companies_house
personal
The entity's active directors/officers as recorded at Companies House — a verified summary (count and/or names).
director_disqualified
string
verify
disqualified_directors_register
personal
Result of checking each director against the disqualified-directors register.
sanctions_pep
string
verify
sanctions_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_id
document_ref
doc
—
personal
Photographic identity document for the relevant director(s).
director_address_proof
document_ref
doc
—
personal
Proof of residential address for the relevant director(s), no older than 3 months.
psc_register
text
verify
companies_house
personal
The PSC register entries for the company — who ultimately owns or controls it.
shareholding_percent
ratio
declare
—
personal
This person's shareholding in the applicant.
role_title
string
declare
—
personal
This person's role in the business (e.g. managing director, finance director).
industry_experience_years
integer
declare
—
personal
Years of relevant sector experience — a standard underwriting factor for newer businesses.
credit_search_consent
boolean
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.
field
type
tag
source
class
req.
guarantee_required
boolean
declare
—
—
Whether the facility under discussion requires a personal guarantee.
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.
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
field
type
tag
source
class
req.
warranty_questionnaire
text
declare
—
—
Summary of the applicant's answers to the warranty questionnaire (adverse disclosures itemised).
truth_statement
text
declare
—
—
●
The applicant's signed statement that the pack's contents are true and complete — the basis of an attestation.
adverse_history_declaration
text
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_pending
text
declare
—
—
Current or threatened litigation involving the business ('none' is a valid answer).
data_processing_consent
boolean
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).
field
type
tag
source
class
req.
aged_debtor_ledger
document_ref
doc
—
—
Aged debtor ledger showing outstanding invoices by debtor and age band.
debtor_concentration
ratio
declare
—
—
Share of the ledger owed by the largest debtor (top-1 concentration).
dilution_rate
ratio
declare
—
—
Credit notes, discounts and disputes as a share of gross invoicing over the trailing period.
average_debtor_days
integer
declare
—
—
Average time to collect receivables, in days.
sample_invoices
document_ref
doc
—
—
Representative recent invoices with proof of delivery/performance.
credit_control_evidence
document_ref
doc
—
—
Collections policy and debtor-management reporting evidencing the credit-control process.
debtor_contracts
document_ref
doc
—
—
Customer contracts or terms of trade underlying the material receivables.
sales_ledger_system
string
declare
—
—
The accounting/ledger system the debtor book is maintained in — funders assess auditability.
terms_of_trade
document_ref
doc
—
—
The business's standard terms and conditions of sale — assignability clauses matter to receivables funders.
debtor_insurance
text
declare
—
—
Whether the debtor book is credit-insured, and with whom ('none' is a valid answer).
contra_accounts
text
declare
—
—
Customers who are also suppliers — contra balances reduce eligible receivables.
export_debtor_share
ratio
declare
—
—
Proportion of the debtor book owed by overseas debtors — often subject to lower advance rates.
eligible_receivables
monetary_amount
declare
—
—
The applicant's estimate of the eligible book after concentration, age, contra and export exclusions.
borrowing_base_certificate
document_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_total
monetary_amount
verify
accounting_api
—
Total outstanding trade debtors at the sync date — the verified counterpart to the aged debtor ledger upload.
pod_verified_value
monetary_amount
verify
tms_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_value
monetary_amount
verify
tms_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_rate
ratio
verify
tms_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_days
integer
verify
tms_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_value
monetary_amount
verify
staffing_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_count
integer
verify
staffing_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_value
monetary_amount
verify
construction_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_value
monetary_amount
verify
construction_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_value
monetary_amount
verify
construction_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_date
date
verify
construction_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_concentration
ratio
verify
construction_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.
field
type
tag
source
class
req.
stock_on_hand_value
monetary_amount
verify
wms_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_date
date
verify
wms_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.
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_mix
list_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_share
ratio
verify
wms_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_days
integer
verify
wms_api
—
Days inventory outstanding — average days stock is held before sale. The inventory leg of the cash conversion cycle (DSO + DIO - DPO).
nolv_rate
ratio
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_appraisal
document_ref
doc
—
—
Independent appraisal supporting the NOLV rate.
stock_locations
list_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_provider
string
declare
—
—
The third party holding the stock, where it is not held at the applicant's own premises.
waiver_of_lien
document_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_insurance
boolean
declare
—
—
Whether the stock is insured to at least its financed value.
inventory_system
string
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_value
monetary_amount
verify
tms_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.
The senior facility documentation the proposed facility ranks behind.
intercreditor_position
text
declare
—
—
Proposed subordination and intercreditor arrangements (ranking, standstill, payment blockage).
enterprise_valuation
document_ref
doc
—
—
Valuation supporting the capital structure, with the multiple/basis stated.
ebitda
monetary_amount
declare
—
—
EBITDA for the most recent 12 months, GBP, basis stated (management or audited).
sponsor_details
text
declare
—
personal
Background of the sponsor or controlling shareholders, where relevant to the credit.
equity_kicker_terms
text
declare
—
—
Proposed warrant or equity-participation terms attached to the facility, if any.
group_structure_chart
document_ref
doc
—
—
Corporate structure showing parents, subsidiaries and cross-holdings — where the borrower sits in the group.
shareholder_loans
monetary_amount
declare
—
—
Outstanding loans from shareholders or directors, and whether they will subordinate.
cross_guarantees
text
declare
—
—
Existing guarantees given for or by other group companies ('none' is a valid answer).
existing_covenants
text
declare
—
—
Financial covenants in existing facilities (leverage, interest cover, etc.) that a new facility must live alongside.
subordination_consent
text
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).
field
type
tag
source
class
req.
gdv
monetary_amount
declare
—
—
Projected gross development value on completion, GBP, basis stated.
total_build_costs
monetary_amount
declare
—
—
Total construction costs including professional fees and contingency, GBP.
drawdown_schedule
document_ref
doc
—
—
Drawdown schedule mapped to the build programme milestones.
planning_permission
document_ref
doc
—
—
Planning consent or permitted-development evidence for the scheme.
monitoring_surveyor
string
declare
—
—
The independent monitoring surveyor overseeing drawdowns.
development_appraisal
document_ref
doc
—
—
The full residual appraisal: land cost, build cost, fees, finance, contingency and profit on cost/GDV.
build_cost_breakdown
document_ref
doc
—
—
Elemental or QS-prepared breakdown supporting total_build_costs.
planning_reference
string
declare
—
—
The local planning authority and application/decision reference for the consent relied on.
s106_cil_liability
monetary_amount
declare
—
—
Planning obligations and Community Infrastructure Levy payable — a real cost line funders check.
professional_team
text
declare
—
—
Architect, QS, structural engineer and principal designer appointed to the scheme.
main_contractor
string
declare
—
—
The main contractor (or confirmation of self-build/construction management).
contractor_track_record
document_ref
doc
—
—
Evidence of comparable completed schemes by the developer and/or main contractor.
build_programme
document_ref
doc
—
—
The construction programme with milestones — drives the drawdown schedule and interest roll-up.
warranty_provider
string
declare
—
—
The new-build structural warranty provider for the completed units.
presales_prelets
document_ref
doc
—
—
Exchanged pre-sales or agreed pre-lets — the strongest exit evidence a scheme can carry.
certified_work_in_place
monetary_amount
verify
construction_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_complete
monetary_amount
verify
construction_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_date
monetary_amount
verify
construction_pm_api
—
Cumulative drawdown against the development facility.
last_certificate_date
date
verify
construction_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_weeks
integer
verify
construction_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_rate
ratio
verify
construction_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).
Evidence for receipts-linked advances repaid as a share of card takings.
field
type
tag
source
class
req.
acquirer_name
string
declare
—
—
The merchant-acquiring provider processing the business's card payments.
acquirer_statements
document_ref
doc
—
—
6–12 months of merchant acquirer statements — the primary underwriting evidence for a receipts-linked advance.
monthly_card_turnover
monetary_amount
declare
—
—
Average monthly card takings over the statement period.
card_turnover_seasonality
text
declare
—
—
Seasonal pattern of card takings — repayments flex with receipts, so the shape matters.
proposed_split_percentage
ratio
declare
—
—
The proportion of daily card receipts proposed to service the advance.
acquirer_switch_required
boolean
declare
—
—
Whether the funder requires the business to switch acquirer or add a lockbox/split arrangement.
verified_card_turnover
monetary_amount
verify
psp_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_count
integer
verify
psp_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_transaction
monetary_amount
verify
psp_api
—
Mean transaction value in the measured window, measured at the acquirer.
verified_refund_rate
ratio
verify
psp_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_value
monetary_amount
verify
psp_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_date
date
verify
psp_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.
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_certificate
document_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_board
string
declare
—
—
Who certified the template — the board or scholar name and capacity.
certificate_expiry
date
declare
—
—
When the certification lapses or is due for periodic review — consumers apply their own freshness policy (validation itself is clock-free).
template_ref
string
declare
—
—
Which certified product template this deal follows (the board's reference).
late_payment_charity_clause
document_ref
doc
—
—
The contract clause routing late-payment amounts to charity rather than to income — the core no-interest prohibition term, evidenced.
disclosed_cost
monetary_amount
declare
—
—
Murabaha/tawarruq: the funder's acquisition cost, disclosed to the customer as a separate figure.
disclosed_markup
monetary_amount
declare
—
—
Murabaha/tawarruq: the profit element, disclosed separately from cost — a disclosed sale margin, not time-indexed interest.
ownership_transfer_date
date
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_date
date
declare
—
—
The date of the onward sale to the customer — must not precede ownership_transfer_date.
ownership_transfer_evidence
document_ref
doc
—
—
Evidence the funder took ownership: supplier invoice in the funder's name, title transfer, or commodity purchase confirmation.
sale_contract
document_ref
doc
—
—
The executed onward contract with the customer (sale, lease, or co-ownership as the structure requires).
co_ownership_agreement
document_ref
doc
—
—
Diminishing musharaka: the joint-ownership agreement between funder and customer.
buyout_schedule
document_ref
doc
—
—
Diminishing musharaka / ijara-to-own: the schedule by which the customer acquires the funder's share.
funder_insurance_evidence
document_ref
doc
—
—
Ijara: evidence the FUNDER (as owner) insures the asset and bears ownership risk.
partnership_agreement
document_ref
doc
—
—
The executed musharaka or mudaraba partnership agreement — who contributes what, and how profit and loss are shared.
capital_contribution_funder
monetary_amount
declare
—
—
The funder's capital contribution to the partnership.
capital_contribution_customer
monetary_amount
declare
—
—
The customer's capital contribution (musharaka). In a mudaraba the funder provides all the capital and this is zero.
profit_sharing_ratio
ratio
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_capital
boolean
declare
—
—
Confirmation the agreement shares losses in proportion to capital contributed — the partnership rule a certifying board looks for.
agency_agreement
document_ref
doc
—
—
The executed wakala agreement — what the agent is appointed to do, and on what terms.
agency_fee
monetary_amount
declare
—
—
The disclosed wakala fee — a fee for a service, not a return on money.
specification_delivery_schedule
document_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_evidence
document_ref
doc
—
—
Salam: evidence the full purchase price was paid up front — the defining feature of the structure.
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.
code
label
ltd
Private limited company
llp
Limited liability partnership
plc
Public limited company
partnership
General/small partnership (may be regulated credit — see entity gate)
sole_trader
Sole trader (may be regulated credit — see entity gate)
other
Other/unknown legal form
provenance_kind
How a fact entered the pack.
code
label
verified
Checked against a named reference-data source
self-declared
Stated by the applicant
document
Backed by an uploaded document
not_collected
Not yet provided — honest absence, never fabricated
field_tag
How a catalogue field is expected to be established.
code
label
verify
Checked against a source
declare
Applicant-stated
doc
Document upload
readiness_status
The pack-level readiness verdict.
code
label
oven-ready
No required gaps
gaps-remaining
Required fields outstanding (listed in readiness.missing)
conformance_level
Evidence level the pack conforms to.
code
label
L1-declared
Applicant-stated
L2-verified-core
No self-declared verify-fields; ≥1 verified fact
L3-attested
L2 + attested + oven-ready
data_class
Data-protection classification of a field.
code
label
personal
Personal data under UK GDPR — controller obligations attach
guarantee_type
Type of personal guarantee offered.
code
label
personal
Personal guarantee
limited
Limited guarantee (capped)
joint_several
Joint & several guarantee
security_type
Security offered against the facility.
code
label
unsecured
Unsecured
secured_property
Secured on property
secured_asset
Secured on specific assets (asset finance)
debenture
Debenture / floating charge
guarantee_only
Personal guarantee only
use_of_funds
Purpose category for the requested facility (the facility-purpose classification — authored v0, refine with funder input).
code
label
working_capital
Working capital / cashflow
equipment_assets
Equipment / asset purchase
vehicles
Vehicles / fleet
property_purchase
Commercial property purchase
property_development
Property development / conversion
fit_out
Fit-out / refurbishment
stock
Stock / inventory
refinance
Refinance / restructure existing debt
acquisition
Business acquisition / MBO / franchise
growth
Growth / expansion / hiring
tax
Tax / VAT / one-off liabilities
invoice_finance
Invoice / receivables finance
other
Other (describe in the_ask.purpose)
verification_source
Named sources a verified fact may cite — see reference-data.v0.json for registry detail.
Islamic financing structures. The standard evidences the chosen structure's checkable requirements; it does not rule on the structures themselves — certification does.
code
label
murabaha
Murabaha (cost-plus sale — funder buys, owns, sells at disclosed cost + markup)
tawarruq
Tawarruq / commodity murabaha (monetisation via commodity purchase and sale)
ijara
Ijara (lease — funder owns and insures the asset)
ijara_muntahia_bittamleek
Ijara muntahia bittamleek (lease ending in ownership)
diminishing_musharaka
Diminishing musharaka (co-ownership + progressive buyout + rent on the funder's share)
musharaka
Musharaka (profit-and-loss-sharing partnership)
mudaraba
Mudaraba (investor capital + manager expertise, shared profit)
wakala
Wakala (agency — agent invests/collects for a fee)
istisna
Istisna (commissioned manufacture / construction)
salam
Salam (forward purchase, price paid up front)
other
Other (describe; certification names the structure)
sharia_level
Sharia conformance ladder — mirrors L1/L2/L3. Coherence enforced by the reference validator.
S2 + 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.
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
operator
UK Government (BEIS/DBT)
verifies
Company identity, status, incorporation, SIC codes, officers, filing history, charges register
identifier
Company number — 8 characters (e.g. 00000000, SC000000, OC000000 for LLPs)
access
Free public API (api.company-information.service.gov.uk), rate-limited, API key
accounting_api — Accounting system (Open Accounting)
operator
The applicant's accounting provider, reached directly or via an aggregator (e.g. Codat)
verifies
Ledger-derived financials: turnover, net profit, gross margin, trade debtors and creditors, as at a stated sync date
identifier
consented connection to the applicant's accounting system
access
commercial 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.
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 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:
Structure — Draft 2020-12 validation against the schema document.
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.
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}).
Entity gate — oven-ready / attested / L2+ require a corporate form; entity vs
business_identity legal-form consistency.
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".
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.
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.
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.
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.
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.
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).
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
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.
NO EQUIVALENT — the provenance + readiness + conformance layer is this standard's contribution; FIBO has no per-fact source-of-truth or oven-ready model
n/a
*.provenance
NO EQUIVALENT — see readiness note
n/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.
field
maps to
confidence
business_identity.company_name
1919 §I — Applicant business legal name
high
business_identity.company_number
1919 §I — business identifier (EIN analogue; UK: company number)
NO EQUIVALENT — SBA forms are static intake; no per-fact provenance or machine-readable readiness verdict
n/a
*.provenance
NO EQUIVALENT — see readiness note
n/a
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.
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.
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.
NOTICE (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.