Morpho

Morpho is a decentralized, non-custodial lending protocol that operates on Ethereum and other EVM-compatible networks. The protocol consists of two primary components:

  • Morpho Markets providing collateral and borrowable asset pairs,
  • Morpho Vaults providing managed yield strategies that allocate deposits across multiple markets.

The P2P.ORG DeFi API supports Morpho on the Ethereum mainnet and Base network. Some strategies (e.g., Steakhouse Financial) are available on both networks.

To retrieve the complete list of available Morpho strategies, send a GET request to the dedicated P2P.ORG /api/defi/v1/earning/strategies endpoint.

Integration prerequisites

Morpho operates through a proxy-based model. Each user creates their own proxy contract, which subsequently facilitates revenue sharing between parties. Since a new P2P Morpho proxy is deployed deterministically at deposit time, the smart contract receiving the deposit does not exist on-chain before the first deposit. Accordingly, the pre-calculated address must be whitelisted in advance.

If your platform uses whitelists restricting which contracts users can deposit to, follow the steps below to ensure successful integration.

⚠️

A custom identifier linked to your merchant account is required. Get an authentication token to start using DeFi API.

1. Whitelist required addresses

Before any USDT or USDC deposit can be made, three addresses must be whitelisted in your system:

#NameAddress
1P2pMorphoProxyFactory0x3FE77F22a81c787B2E8dBF366F963f772E799568
2USDT Token (ERC-20)0xdAC17F958D2ee523a2206206994597C13D831ec7
3Permit20x000000000022D473030F116dDEE9F6B43aC78BA3

Note for USDC: For the USDC token address, follow the same whitelisting pattern (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)


2. Whitelist future proxy address

The proxy address is derived deterministically from your depositor wallet address — it does not exist on-chain until the first deposit is made.

To get your pre-calculated proxy address, call the predictP2pLendingProxyAddress read function on the P2pMorphoProxyFactory contract directly on Etherscan:

  1. Go to the contract's Read Contract tab on Etherscan:
    0x3FE77F22a81c787B2E8dBF366F963f772E799568 – Read Contract.
  2. Find the predictP2pLendingProxyAddress function.
  3. Enter the following parameters:
  • _clientAddress: your depositor wallet address.
  • _clientBasisPoints: 9000.
  1. Click Query. The returned address is your future proxy address.

Whitelist the returned proxy address before attempting the deposit.


3. Configure transaction authorization policy (TAP)

This step is required to allow USDT → Permit2 approvals through your system. Without it, the approval transaction will be blocked at the policy layer.

Note: The steps below describe the flow for Fireblocks. The actual UI for your integration may use slightly different naming or layout, but the overall process and intent remain the same.

  1. Refer to the Fireblocks Console → Settings → Governance → Transaction Authorization Policy section.

  2. Go to the "Approve" section (not "Transfers").

  3. Add a new rule:

FieldValue
AssetUSDT (ERC-20 on Ethereum)
ActionApprove
Spender / Contract0x000000000022d473030f116ddee9f6b43ac78ba3 (Permit2)
From Wallet(s)Your staking wallet address
AmountUnlimited — or set a limit
dApp URL (optional)https://widget.p2p.org — add to tightly restrict scope
  1. Add another rule with USDC (ERC-20 on Ethereum) as the asset, keeping all other fields the same.

  2. Save the policy before proceeding.


4. Check deposit

Note: The steps below describe the general deposit flow via the P2P widget. Exact button labels and screen layout for your system may vary — follow the same overall process as described.

With all whitelisting and TAP configuration complete:

  1. Open the P2P.ORG widget at https://widget.p2p.org.
  2. Connect via Fireblocks.
  3. Select USDT (or USDC) on Ethereum.
  4. Initiate the deposit.

The approval and deposit transactions should now route through Fireblocks without being blocked.

What's next?