FHFA opened crypto as a mortgage asset · Jun 2025
non-QM crypto income · verified · USD · tax-grounded

Your income is on-chain.
Shore brings it ashore.

The income layer for crypto. The borrower connects a wallet, signs once (read-only), and Shore reads their staking and DeFi yield, classifies it under the tax rules, and returns lender-ready qualifying income with a certificate. Non-QM ready, drop-in.

Open the harness npm i @fenero/shore
Read-only & non-custodial Tax-grounded (Rev. Rul. 2023-14) Certificate of provenance Multi-chain
qualify.ts
1 // the income step, now for on-chain wealth
2 const income = await useShore({
3   wallet: true,        // borrower connects + signs
4   chains: "all",        // ETH, SOL, L2s…
5   certificate: true
6 })
7
8 income.monthlyQualifying   // → 1855 USD/mo
9 income.taxBasis             // ordinary @ receipt
10 income.certificate.hash     // 0x… ✓ verified

Reads yield from

EthereumSolanaLidoRocket Pool CoinbaseKrakenEigenLayerJitoAny validator Any L2Even cold storage
// verify(wallet) → income

One connect. Income a lender can underwrite.

Conforming loans can't count crypto income. Shore lives in the non-QM lane and does exactly one thing: turn a borrower's on-chain yield into clean, verified, tax-grounded qualifying income, in the schema your underwriting already reads.

Connect any wallet

MetaMask, Coinbase Wallet, Phantom, Rabby, Ledger, WalletConnect. The borrower picks one and signs. No app, no account, no seed phrase shared.

Reads staking & DeFi yield

Lido, Rocket Pool, EigenLayer, exchange staking, Solana validators, LP and lending yield, across every chain and L2. One read, all of it.

Tax-grounded income

Yield is classified as ordinary income at receipt (IRS Rev. Rul. 2023-14) and seasoned over 24 months. The same policy-to-rules logic Fenero runs on tax returns.

Read-only, non-custodial

The borrower signs a message to prove ownership. Shore never holds keys, never moves funds, never takes custody. A signature, not a transaction.

Certificate of provenance

Every result ships with a verifiable certificate: wallet proof, on-chain source, USD conversion, tax basis. Defensible enough to put in front of an investor.

Non-QM ready schema

Qualifying income returns in a clean schema your DSCR / bank-statement underwriting already parses. Drop-in. You only pay when it returns verified income.

// how it works

Wire it once. Income comes back.

1

Install the SDK

npm i @fenero/shore and drop in your API key.

2

Borrower connects + signs

Call useShore({ wallet: true }). A neon connect popup opens on your page. The borrower picks a wallet and signs a read-only message to prove ownership.

3

Shore reads & classifies yield

We scan every chain for staking and DeFi positions, price them in USD, and classify the yield as income under the tax rules, seasoned over 24 months.

4

Qualifying income, back to you

A monthly qualifying-income figure plus a certificate of provenance returns in the same call. Your underwriting doesn't change. You only pay for this step.

shore.ts
1 import { useShore } from "@fenero/shore"
2
3 // borrower connects a wallet, signs once
4 const income = await useShore({ wallet: true })
5
6 // → tax-grounded, USD, 24-mo seasoned
7 income.monthlyQualifying  // 1855
8 income.positions[]        // Lido, RP, Jito…
9 income.certificate        // 0x… provenance ✓
// what the borrower sees

It lives inside the income step you already run.

Shore isn't a new integration to design around. It's the income check, for the borrower whose paycheck is a validator. Same screen, same schema, same workflow. They connect a wallet instead of uploading a W-2.

your app
01

Income can't be read

Self-employed, paid in crypto, or living on staking yield. No W-2, no pay stub, nothing your income step can use.

shore
02

Connect a wallet

Your code calls useShore(). A neon connect popup drops on the page. The borrower picks a wallet and signs.

borrower
03

Signs, read-only

One signature proves they own the wallet. No funds move, no keys shared. Shore reads the chain.

shore
04

Qualifying income back

USD, tax-grounded, seasoned, with a certificate. Returns in the same call your underwriting already reads.

// drop-in, your brand

Your screen. Your brand. On-chain income under it.

With wallet: true the borrower never leaves your page. The Shore connect popup renders right where the income step stalled. They sign once, and verified qualifying income comes back.

Drop it in as a React hook, vanilla JS, a <shore-connect> web component, or a zero-SDK hosted page. Same popup, any stack.

Try it live, this exact popup runs on this page. Launch the wallet demo →
app.yourlendingco.com/verify-income
on-chain income detected

Verify your crypto income

Connect the wallet that earns your staking and DeFi yield. We'll read it, you keep custody.

🦊 🔵 👻 🔗
// non-custodial by default

The borrower keeps the keys. Always.

Shore reads, it never holds. Proof is a signature, not a transfer. The most paranoid crypto-native borrower can connect without giving up a thing.

Zero key custody

Shore never sees a private key or seed phrase. Ownership is proven with a signed message. We cannot move funds. Ever.

Read-only access

Public addresses and on-chain data only. No approvals, no spend permissions, no transactions requested.

Never trains a model

Wallet data is used for the one call and nothing else. Never resold, never shared, never training data.

Verifiable certificate

Every result is independently checkable: wallet proof, on-chain source, USD basis, tax classification. Audit export on demand.

Non-custodial Read-only Signature proof No private keys SOC 2 Type II
// pricing

Pay per verified income certificate.

No seats, no subscription. You're billed only when Shore returns verified qualifying income. A borrower who never connects costs you nothing.

Default · usage-based
$9/ verified income read
One flat price per successful result. A borrower who never connects a wallet costs you nothing.
  • Wallet connect popup & hosted page
  • Any chain, any staking / DeFi protocol
  • USD, tax-grounded, 24-mo seasoned
  • Returns in your underwriting schema
  • Non-custodial, read-only
Get Access →
Certified · per certificate
$19/ certified income
Everything in Default, plus a full Certificate of Provenance per call. Defensible enough for a non-QM investor or auditor.
  • Certificate of provenance per read
  • Wallet-ownership proof & on-chain source
  • Tax-basis & seasoning audit trail
  • Position-level confidence log
  • Exportable for underwriting & secondary
Get Access →
Custom · enterprise
Priced in bps
Per-funded-loan pricing in basis points, your brand on the borrower flow, and volume rates. The Fenero platform deal.
  • Per-closed-loan bps (license-to-bps)
  • Your logo on the connect flow
  • Bundled with Fenero income & certificate
  • Volume & committed-use rates
  • SSO, audit export, SLAs
Contact us →
Provenance & audit certificate available from Certified up. Prices illustrative; the platform deal prices in bps per funded loan.
// finally { fund() }

Get early access to Shore.

Limited private beta. We onboard design partners personally and wire it into your stack with you.

const income = await useShore({ wallet: true })