Only this pageAll pages
Powered by GitBook
1 of 42

Pareto

Loading...

Product

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Developers

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Resources

Loading...

Credit Vaults

Credit Vaults (CVs) are a suite of smart contracts built to simplify on-chain lending and credit position management for borrowers and lenders. They provide the infrastructure for real-world financing, making it more transparent and efficient.

Assets deposited into a Credit Vault are sent directly to borrower wallets. Only whitelisted borrowers can access loans, and only registered users who complete verification through Keyring can provide liquidity.

Features

Credit Vaults introduce several innovations to address inefficiencies in traditional DeFi lending and offer a customized experience for borrowers, curators, and lenders:

  • Diverse IRM: CVs support both fixed and variable interest rate models. Variable rates are usually benchmarked to third-party data sources, making vault performance easy to monitor.

  • Flexible lending cycles: Funds are locked for short periods (typically 1 to 4 weeks), called lending cycles, allowing high capital utilization and predictable fund management.

  • Regulation compliance: Native support for privacy-preserving verification and KYC ensures compatibility with regulatory requirements.

Flow of funds

Credit Vaults operate on a cycle-based system. Funds are borrowed in fixed time intervals known as lending cycles. The IRM and the duration of the first cycle are defined at vault deployment. Thereafter, at the end of each cycle, the curator can update these parameters.

  1. Before the first cycle starts, whitelisted lenders deposit funds.

  2. The curator triggers the start of the cycle.

  3. The borrower receives the funds directly in their wallet.

  4. Interest accrues for lenders throughout the cycle.

The process repeats, with updated terms, if applicable, for all the following cycles.

Redeems

While deposits happen in a single step, withdrawals are a two-step process:

1

Withdraw request

A user requests to redeem funds (principal and/or accrued interest) at the end of Cycle I.

2

Funds claim

At the end of Cycle II, the borrower repays interest and any requested withdrawals. Users who requested to exit can now claim their funds.

Early exit

When the interest rate of the next lending cycle is lower than the previous one by 1% or more (or otherwise provided in the Credit Agreement), lenders are entitled to an early exit and can redeem funds with a shorter waiting period, i.e., within 72 hours.

For example, a lender requests a withdrawal on Jan 31 during Cycle I, where the interest rate is 15%. If the Cycle II rate drops to 12%, the lender qualifies for an early exit and can claim his funds 72 hours after Cycle II starts (i.e., on Feb 3).

Architecture

The diagram illustrates the architecture of Credit Vaults

The curator, with the express consent of lenders and the borrower, retains the authority to modify, amend, or adjust CV's parameters as necessary to accommodate requests from lenders or the borrower, or to ensure alignment with the terms and conditions outlined in the MLA.

Verification

The verification and KYC compliance on Credit Vaults is processed through Keyring.

Keyring offers streamlined and flexible solutions

  1. Through Keyring Connect, it is possible to seamlessly inherit compliance verification from third-party platforms such as Coinbase, Binance, Kraken, and other centralized exchanges. This process includes credentials and information, including entity jurisdiction, source of capital, source of wealth, source of funds, directors, UBOs, significant controllers, and letters of authorization.

  2. Alternatively, if required by the Borrower for more comprehensive verification needs, Keyring Pro lets borrowers establish bespoken KYC/KYB policies, requesting more detailed information and document uploads from lenders. A live register of verified lenders is maintained within Credit Vaults.

Guides

Deposit

Once is completed, users can proceed to deposit into the selected Credit Vault.

Users can deposit during the cycle buffer period, i.e., the 6 to 24 hours between the end of the previous lending cycle and the start of the new one. Alternatively, users can use the Queue contract to schedule their deposit while a cycle is running.

During a buffer period

Users should sign two transactions:

1

Spending approval

To allow Pareto’s smart contract to process users’ deposits

2

Deposit

To execute the lending action

Upon completion:

  • The user’s wallet will reflect a reduction in the deposited stablecoin

  • The user will receive representing his position in the pool

While a lending cycle is running

Alternatively, users can use the Queue contract to schedule their deposit while a cycle is running. Users will queue a deposit request, which will be processed by the pool curator at the first available buffer period.

The same Spending Approval and deposit flow applies

1

Spending approval

To allow Pareto’s smart contract to process users’ deposits

2

Request deposit

To execute the deposit request action

3

Claim LP tokens

The user will need to claim Credit Vault LP tokens representing his position in the pool after the new lending cycle starts

Upon completion of steps 1, and 2:

  • The user’s wallet will reflect a reduction in the deposited stablecoin

  • The user will need to claim his representing his position in the pool after the new lending cycle starts

Vault types

Vault types define internal classifications for vault contracts, distinguishing between different logic structures, yield mechanisms, or operational modes. These types are useful for rendering vault metadata, sorting/filtering in UI, or determining strategy compatibility.

Structure

Each vault type object includes:

  • _id (string) — Unique identifier

  • code (string) — Internal reference code for the vault type

  • name (object) — Multilingual object (e.g., { en: "Fixed Rate" })

  • description (object) — Multilingual description object

  • createdAt, updatedAt (string) — ISO UTC timestamps

  • createdBy, updatedBy (string) — Actor IDs

Endpoints

Risks

This section describes the risks associated with USP, and the actions taken to mitigate such risks.

Stablecoin related risk

The use of stablecoins such as USDC or USDS introduces additional risks associated with fiat-backed stablecoins. Risks associated with these stablecoins are generally disclosed by the issuer of the token (see USDC terms and USDS risks).

Centralized stablecoins provide stability and capital efficiency, but they introduce:

  • Unhedgeable custodial risk with bond reserves in regulated bank or trust accounts, which are prone to censorship.

  • A critical reliance upon the existing traditional banking infrastructure and country-specific evolving regulations.

  • Represent an unsecured credit position to both the issuer and underlying bank holding the reserve assets while mixing these assets with other bank lending activities.

Counterparty risk

USP generates yield from Credit Vaults that lend funds to TradFi institutions. This introduces a counterparty risk for USP holders given there is a chance that a party fails to meet its obligations, potentially leading to financial losses.

To mitigate this risk, USP relies on:

  1. Stability fund: 5% of the fees generated by USP are saved in a fund that should cover potential CVs' losses

  2. Stakers' deposits: sUSP holders should cover additional losses by having their conversion price to USP reduced to keep the peg for USP stable

Addresses

Users

Product

onboarding
Credit Vault LP tokens
Credit Vault LP tokens
Claim LP tokens preview when a deposit was made during a cycle running

Lenders

Lenders, such as asset managers, digital asset funds, and other professional investors, are an integral part of the Credit Vault setup and are an essential element of the lending-borrowing equation.

Key responsibilities

  • Lenders must be whitelisted and complete the required verification via Keyring before being allowed to interact with Credit Vaults.

  • Lenders must allow Credit Vaults (spending allowance) to execute their deposit/redeem requests.

  • Lenders can deposit funds between lending cycles or queue their deposit requests if the cycle is running. Upon deposit, lenders receive the equivalent in LP tokens in their wallet, representing their principal and accrued interest. The Credit Vault LP tokens accumulate interest through their exchange rate; over time, each cvToken becomes convertible into an increasing amount of the deposited funds, which represents the interest accrued according to the Credit Agreement.

  • Lenders can redeem funds by sending a withdrawal request to claim back funds at the end of the following lending cycle. When completing the withdrawal request, lenders send back an amount of LP tokens proportional to the withdrawal amount. At the end of the next lending cycle, they can complete the process by claiming their funds.

    • When the interest rate of the next lending cycle is lower than the previous one by 1% or more (or otherwise provided in the Credit Agreement), lenders are entitled to an early exit and can redeem funds with a shorter waiting period, i.e., within 72 hours.

Operators

Operators represent key entities that interact with the Pareto protocol. These can be protocol partners, borrowers, or curators responsible for deploying or managing vaults.

Structure

Each operator object includes:

  • _id (string) — Unique identifier

  • name (string) — Name of the operator

  • code (string) — Unique internal code

  • type (string) — One of: PROTOCOL, BORROWER, CURATOR

  • description (object) — Multilingual description (e.g. { en: "This is a protocol operator" })

  • shortDescription (object) — Short version of the description

  • caption (object) — Promotional caption

  • rating (string) — Internal rating indicator

  • location (string) — Geographic reference

  • links (object) —

    • website (string)

    • twitter (string)

    • linkedIn (string)

    • crunchbase (string)

  • createdAt, updatedAt (string) — ISO timestamps (UTC Unix time)

  • createdBy, updatedBy (string) — Actor IDs for auditing

Endpoints

Vaults

Vaults are the core contracts of the Pareto protocol. They represent on-chain vehicles that accept user deposits, deploy strategies, and accrue yield over time.

Each vault is tied to a specific strategy, chain, and token, and is managed by one or more operators.

Structure

Each vault object includes:

  • _id (string) — Unique identifier

  • tokenId (string) — Accepted token reference

  • chainId (string) — Blockchain network identifier

  • typeId (string) — Reference to vault type

  • categoryId (string) — Vault category

  • operatorIds (array[string]) — Managing entities

  • name (string) — Name of the vault

  • address (string) — On-chain vault contract address

  • symbol (string) — Symbol of the share token

  • protocol (string) — Strategy protocol (e.g., AaveV2, Clearpool, Morpho, etc.)

  • contractType (string) — Contract logic (e.g., BestYield, CDO, CDO_EPOCH)

  • abi (array) — ABI definition

  • description, shortDescription, caption (object) — Multilingual metadata

  • keyInfo (array) — Key-value UI information

  • visibility (string) — One of: PUBLIC, RESTRICTED, HIDDEN

  • status (string) — Deployment status (e.g., READY, PAUSED, DISABLED)

  • feePercentage (number) — Vault fee as percentage

  • createdAt, updatedAt (string) — ISO timestamps

  • createdBy, updatedBy (string) — System actor IDs

Endpoints

Tokens

Tokens are ERC-20 compatible assets used in vaults and tracked by the Pareto protocol across multiple chains.

Structure

Each token object includes:

  • _id (string) — Unique identifier

  • name (string) — Name of the token

  • symbol (string) — Token symbol (e.g. USDC, WETH)

  • chainId (string) — Chain this token belongs to

  • address (string) — On-chain contract address (0x...)

  • decimals (number) — Token decimal precision

  • color (string) — UI color reference for this token

  • oracle (object) — Price oracle metadata:

    • address (string) — Oracle contract address

    • abi (array) — Oracle ABI definition

    • protocol (string) — Data source (e.g., Idle, AaveV2, Morpho, Clearpool)

    • fee (number, optional) — Optional oracle fee

    • Additional optional config fields (e.g. fromBlock, USDCAddress, ...)

  • createdAt, updatedAt (string) — ISO timestamps

  • createdBy, updatedBy (string) — System actor IDs

Endpoints

Transactions

Transactions represent user and system interactions with Pareto vaults such as deposits, redemptions, and claims.

Structure

Each transaction object includes:

  • _id (string) — Unique identifier

  • type (string) — One of: DEPOSIT, REDEEM, CLAIM

  • status (string) — One of: PENDING, SUCCESS, FAILED

  • hash (string) — Transaction hash on-chain

  • chainId (string) — Blockchain ID where the transaction occurred

  • walletAddress (string) — Wallet initiating the transaction

  • vaultId (string) — Associated vault

  • epochId (string) — Related epoch (if applicable)

  • tokenId (string) — Token involved

  • amount (string) — Amount transacted

  • amountUSD (string) — USD equivalent of the transaction

  • gasFeeUSD (string) — Gas fee in USD

  • block: (object)

    • number (number) — Block number

    • timestamp (number) — Unix timestamp of the block

  • createdAt, updatedAt (string) — ISO timestamps

  • createdBy, updatedBy (string) — Actor identifiers

Endpoints

Chains

Chains represent the supported blockchain networks that Pareto interacts with. These include the networks where vaults are deployed, where user interactions occur, and where transactions are tracked.

Structure

Each chain object includes:

  • _id (string) — Unique identifier for the chain

  • name (string) — Human-readable name of the blockchain (e.g., "Ethereum")

  • chainId (string) — Network ID used internally by Pareto

  • nativeToken (string) — Symbol of the native currency (e.g., ETH, MATIC)

  • explorerUrl (string) — Block explorer base URL for linking transactions or accounts

  • icon (string) — Optional icon URL

  • createdAt, updatedAt (string) — ISO timestamps (UTC Unix time)

Endpoints

Curators

Curators are an integral part of the Credit Vault setup and are essential for stakeholder relations and vault activities. They can leverage underwriting on-chain expertise to enhance capital efficiency, mitigate counterparty risk, and elevate market transparency with institutional-grade credit structuring.

New curators should begin with this overview to build a solid foundation, while experienced curators may reference specific sections for targeted guidance.

Key responsibilities

  • The curator is responsible for opening and closing lending cycles. At the start of a cycle, funds are transferred from the CV to the borrower's wallet. At the end of the cycle, the curator closes the cycle and automatically retrieves interest and processes any withdrawal requests.

  • The curator manages the execution of pending deposit and withdrawal requests in the queue contracts.

  • If needed, the curator can adjust vault parameters such as APR, fees, and lending cycle length.

Curator app

The Pareto manager app is a specialized front-end interface designed for configuring and managing Credit Vaults. Available at , this tool provides real-time visibility into fund inflows and outflows. Only whitelisted addresses can interact with the manager app.

From the manager app, curators can easily see the status of the current lending cycle, a countdown to the epoch end, and the borrower's wallet allowance and balance. When a lending cycle ends, they can close it and adjust the length and APR for the following cycle.

Implementation note: Some actions are not yet implemented in the manager app. For this reason, curators should interact directly with through verified sources such as or . Always verify contract addresses before interaction.

Governance

Ethereum

Description
Address

Optimism

Description
Address

Arbitrum

Description
Address

Polygon

Description
Address

Token blocks

Token blocks are periodic snapshots of token-related data captured at specific blockchain blocks. These are used in vault logic and on-chain analytics.

Structure

Each token block object includes:

  • _id (string) — Unique identifier

  • tokenId (string) — ID of the associated token

  • tokenAddress (string) — Ethereum address of the token (0x... format)

  • price (string) — Price of the token at this block

  • block (object) —

    • number (number) — Block number

    • timestamp (number) — Unix timestamp (UTC)

  • createdAt, updatedAt (string) — ISO timestamps

  • createdBy, updatedBy (string) — Actor IDs

USP

Ethereum

USP

Description
Address

Borrowers

Borrowers are essential to offer yield strategies to liquidity providers on Pareto. They can leverage proprietary expertise to collect new funds from DeFi users while providing yield strategies that are traditionally limited to TradFi institutions.

Key responsibilities

  • At the start of each cycle (also referred to as "loan cycle" or "loan period" in the Credit Agreement), the borrower automatically receives funds deposited into the CV.

  • The borrower’s wallet address is fixed and cannot be modified after smart contract deployment.

  • Prior to the end of each cycle, the borrower must ensure to have approved (i.e., set allowance) the CV main contract to automatically settle interest payouts and withdrawal requests.

  • The borrower’s wallet must maintain sufficient funds to cover interest and standard withdrawal requests at the end of the cycle and repricing withdrawals once a new lending cycle begins.

Curator app

The Pareto manager app is a specialized front-end interface designed for configuring and managing Credit Vaults. Available at , this tool provides real-time visibility into fund inflows and outflows. Only whitelisted addresses can interact with the manager app.

From the manager app, borrowers can easily see the status of the current lending cycle, a countdown to the epoch end, and the wallet allowance and balance.

Implementation note: Some actions are not yet implemented in the manager app. For this reason, curators should interact directly with through verified sources such as or . Always verify contract addresses before interaction.

Vault categories

Vault categories group vaults by their investment profile, strategy type, or risk classification. They provide high-level metadata for sorting and UI filtering.

Structure

Each vault category object includes:

  • _id (string) — Unique identifier

  • code (string) — Unique category code (e.g. "CAT_1", "STRATEGY")

  • name (object) — Multilingual name (e.g., { en: "Stable Yield" })

  • description (object) — Multilingual description

  • createdAt, updatedAt (string) — ISO timestamps (UTC Unix time)

  • createdBy, updatedBy (string) — Actor IDs

Endpoints

Redeem

Users can withdraw during the cycle buffer period, i.e., the 6 to 24 hours between the end of the previous lending cycle and the start of the new one. Alternatively, users can use the Queue contract to schedule their withdrawal while a cycle is running. The exit request will be processed by the pool curator at the first available buffer period.

While deposits happen in a single step, withdrawals are a two-step process happening during two different cycles:

1

Spending approval

To allow Pareto’s smart contract to process users’ LP tokens exit request

2

Withdrawal request

A user requests to redeem funds (principal and/or accrued interest) at the end of Cycle I.

3

Funds claim

At the end of the following cycle (Cycle II), the borrower repays interest and any requested withdrawals. Users who requested to exit can now claim their funds.

Upon completion of steps 1, and 2

  • The user’s wallet will reflect a reduction in the representing his position in the pool

  • The user will need to claim his stablecoins representing his initial deposit, plus any interest generated after the new lending cycle starts

Early exit

When the interest rate of the next lending cycle is lower than the previous one by 1% or more (or otherwise provided in the Credit Agreement), lenders are entitled to an early exit and can redeem funds with a shorter waiting period, i.e., within 72 hours.

For example, a lender requests a withdrawal on Jan 31 during Cycle I, where the interest rate is 15%. If the Cycle II rate drops to 12%, the lender qualifies for an early exit and can claim his funds 72 hours after Cycle II starts (i.e., on Feb 3).

Similarly, users can use the Queue contract to schedule their redemptions while a cycle is running. Users will queue a withdrawal request, which will be processed by the pool curator at the first available buffer period.

Timelock

0xDa86e15d0Cda3A05Db930b248d7a2f775e575A44

Treasury multisig

0xFb3bD022D5DAcF95eE28a6B07825D4Ff9C5b3814

Developers multisig

0xe8eA8bAE250028a8709A3841E0Ae1a44820d677b

Pauser multisig

0xBaeCba470C229984b75BC860EFe8e97AE082Bb9f

Timelock

0xa3a3741c48298e21EEbE5A59bEAF6f89DC0E0c4c

Treasury multisig

0xFDbB4d606C199F091143BD604C85c191a526fbd0

Timelock

0xB988641E8D493B5BfF65e63819975b6B33477057

Treasury multisig

0xF40d482D7fc94C30b256Dc7E722033bae68EcF90

Timelock

0x45f4fb4D0CCC439bB7B85Ba63064958ab7e31EE4

Treasury multisig

0x61A944Ca131Ab78B23c8449e0A2eF935981D5cF6

Contract

0x97cCC1C046d067ab945d3CF3CC6920D3b1E54c88

Staking (sUSP)

0x271C616157e69A43B4977412A64183Cf110Edf16

manager.pareto.credit
vault contracts
Etherscan
Blockscout
manager.pareto.credit
vault contracts
Etherscan
Blockscout

USP

USP is a synthetic dollar protocol backed by real-world institutional-grade private credit, alongside a globally accessible savings asset, sUSP.

Pareto's USP is not the same as a fiat stablecoin like USDC or USDT. USP is a synthetic dollar, backed by on-chain credit lines. This means that the risks implicated by interacting with USP are inherently different.

Please refer to the Risks section for an overview.

USP

Users mint USP (ERC-20) by depositing stablecoins, e.g. USDC, USDS, into the ParetoDollar contract. The contract mints USP and deposits the underlying assets into Credit Vaults. Credit Vaults lend assets to institutional players that perform yield strategies to generate yield later distributed to USP stakers, i.e., sUSP holders (ParetoDollarStaking contract). A small percentage of total funds can be deposited also in ERC-4626 compliant yield sources to process redeems faster.

The allocation of funds for each credit vault is determined by a board that operates through the ParetoDollarQueue contract.

Benefits

USP offers the following benefits:

  • Composable: USP is a transferable, permissionless asset that integrates across DeFi and CeFi, streamlining capital deployment, risk management, and settlements

  • Capital efficient: Minted 1:1 against major stablecoins, USP is deployed into a diversified portfolio of liquid, short- and long-term credit, balancing liquidity and yield

  • Protected: USP holds senior priority in the capital stack and is shielded by a peg stability reserve that provides an additional buffer against defaults and market stress

Aquisition

The acquisition of USP happens either through the USP contract or in a permissionless way through AMM pools. Users can:

  • Acquire USP permissionlessly using external AMM pools with assets such as USDT or USDC

  • Mint USP directly by depositing stablecoins (USDC, USDS), subject to clearing users' verification checks

  • Redeem USP directly by burning the token and receiving backing assets, subject to clearing users' verification checks

sUSP

Once USP is staked into sUSP, users can earn yield from the interest generated by Credit Vaults. The interest paid is reflected in a higher sUSP price than the plain USP effectively creating an interest-bearing token. sUSP's yield is also boosted by non-staked USP, for which the collateral will still be used by Credit Vaults, but receive no interest that instead is distributed only to USP stakers. Stake USP is not rehypothecated in any way and just stays in the contract.

Benefits

sUSP offers the following benefits:

  • Yield generating: sUSP, designed for stable, risk-adjusted returns, allows users to earn yield from Credit Vaults and participate in Pareto’s long-term growth

  • Liquid: sUSP is fully liquid and non-custodial. Holders can exit at any time by simply unstaking, without lockups or withdrawal restrictions

  • Diversified: sUSP provides exposure to a broad set of credit lines reducing single-counterparty risk through structured diversification

Acquisition
  • Stake and unstake USP through Pareto's app to receive rewards from Credit Vaults revenue.

Peg stability mechanism

USP is backed 1:1 with funds lent to institutional players. If one of the borrowers fails to deliver the funds back to the vaults, sUSP holders will cover the losses by having their conversion price to USP reduced to keep the peg for USP stable (a Stability Fund has been created to provide a buffer before slashing sUSP holders).

  • If the USP price is above $1, verified parties can mint USP by depositing stablecoin collaterals moving its price back to $1.

  • If the USP price is below $1 then verified parties can buy USP in the market, request a redemption, and receive stablecoins collateral after waiting the cooldown period, if any.

Credit Vault LP tokens

Vault epochs

Vault epochs define fixed-duration accounting periods used in vault logic to compute returns, manage liquidity flows, and determine claim availability.

Structure

Each vault epoch object includes:

  • _id (string) — Unique identifier

  • vaultId (string) — Vault the epoch belongs to

  • vaultAddress (string) — Address of the vault

  • block (object) —

    • number (number) — Block number

    • timestamp (number) — Unix timestamp

  • count (number) — Epoch sequence index

  • status (string) — One of: WAITING, RUNNING, DEFAULTED, CURE

  • startDate (string) — ISO 8601 start date

  • endDate (string) — ISO 8601 end date

  • startCureDate (string) — When cure phase begins (if applicable)

  • apr (number) — Estimated APR

  • lastApr (number) — APR from previous epoch

  • expectedInterest (string) — Interest forecasted during this epoch

  • unclaimedFees (string) — Fees not yet claimed

  • deposits (string) — Total deposits in epoch

  • duration (number) — Duration in seconds

  • bufferDuration (number) — Buffer window after epoch ends

  • withdrawType (string) — Either INSTANT or STANDARD

  • withdraws (object) —

    • amount (string)

    • fees (string)

  • depositQueue (object) —

    • amount (string)

    • lastAmount (string)

    • isInstant (boolean)

  • withdrawQueue (object) —

    • amount (string)

    • lastAmount (string)

    • isInstant (boolean)

  • instantWithdraws (object) —

    • allowed (boolean)

    • delay (number)

    • amount (string)

    • aprDelta (number)

    • deadline (string) — ISO 8601 date

    • disabled (boolean)

  • createdAt, updatedAt (string) — ISO 8601 timestamps

  • createdBy, updatedBy (string) — Actor IDs

Endpoints

Audits

Date
Scope
Auditor
Report

Apr 2025

USP

Apr 2025

USP

X77 (, )

Apr 2025

USP

Jan 2025

Credit vaults

Nov 2024

CVs withdraw queue

Oct 2024

CVs deposit queue

Oct 2024

Credit vaults

Aug 2024

Credit vaults

Campaigns

Campaigns are point-based programs used to incentivize user activities on Pareto. Users can earn points by interacting with vaults or participating in social activities.

Structure

Each campaign object includes:

  • _id (string) — Unique identifier

  • code (string) — Campaign code

  • name (object) — Multilingual name, e.g. { en: "My Campaign" }

  • description (object) — Multilingual description

  • rules (array) — Conditions for earning points:

    • name, description (object) — i18n fields

    • trigger (string) — DEPOSIT or DEPOSIT_REQUEST

    • deposit (object) —

      • type: BALANCE or AGE

      • value: number

    • reward (object) —

      • type: AMOUNT or MULTIPLIER

      • value: number

    • frequency (object) — repetition rules (value, unit)

  • referrals (array) — Invite codes with activation flag

  • startDate / endDate (string) — ISO datetime

  • link (string) — URL

  • galxeId (number) — External reference

  • createdAt, updatedAt (string) — ISO timestamp

  • createdBy, updatedBy (string) — Actor IDs

Endpoints

Media kit

Pareto brand guidelines provide logos, icons, and descriptions about the brand.

About Pareto

Tagline

Pareto is an on-chain private credit marketplace.

Short description

Pareto is a private credit marketplace that connects institutional lenders and borrowers, providing scalable, yield-generating opportunities and bridging institutional capital on-chain.

Boilerplate description

Pareto is a private credit marketplace that connects institutional lenders and borrowers, providing scalable, yield-generating opportunities and bridging institutional capital on-chain.

Tailored for asset managers, digital asset funds, and other professional investors, Pareto offers seamless access to regulatory-compliant alternative credit products. Its infrastructure emphasizes transparency, automation, and flexibility. Credit Vaults are the core primitive: they eliminate utilization-based inefficiencies, reduce operational overhead, and improve capital efficiency for both lenders and borrowers.

As the financial landscape evolves, Pareto aims to set a new standard for institutional credit with fully automated, data-driven lending solutions.

About USP

Tagline

USP is a credit-backed synthetic dollar.

Short description

USP is a synthetic dollar protocol backed by real-world institutional-grade private credit, alongside a globally accessible savings asset, sUSP.

Brand assets

Logos

Pareto's logo visually represents the core principles of liquidity flow, financial connectivity, and cyclical capital movement, emphasizing the Pareto 80/20 principle.

258KB
Pareto_brand_assets.zip
archive

Typography

Primary font: GT Sectra

Secondary font: GT America Mono

Colors

Primary colors

Secondary colors

Onboarding

This guide outlines the steps required to complete the onboarding for liquidity providers on Pareto. The process consists of two main phases: verification and contract signature.

To begin:

  • Visit app.pareto.credit

  • Select a Credit Vault (e.g., the Fasanara pool)

  • Connect a supported wallet

1

Verification

By default, Credit Vaults offer a zero-knowledge (ZK) verification method powered by Keyring Connect. In select cases, a standard KYC process with document uploads should be followed instead.

Keyring Connect integrates existing KYC credentials from centralized exchanges such as Binance, Kraken, and Coinbase. This enables seamless verification while preserving privacy and minimizing data exposure.

  • Install the Keyring Chrome extension

  • Launch the verification process

  • Create or log in to a Keyring account. Verify the account

  • Select a centralized exchange (CEX) within the extension to link credentials

  • Authenticate and complete the verification process

  • Generate credentials. A blockchain transaction will be triggered to cover attestation fees

  • Refresh the app page

Note: Verified credentials aren't shared across all vaults on Pareto. New credentials must be generated for each vault the user interacts with. Keyring may request periodic re-authentication, similar to session revalidation flows (e.g., Google OAuth).

2

Contract signature

Before depositing, users are required to sign two agreements:

  1. Terms of Service (ToS) that govern interaction with Pareto

  2. Master Loan Agreement (MLA) that governs the lending relationship between the liquidity provider and the borrower (e.g., Fasanara Digital)

These contracts are signed on-chain, linking a unique ID to the user’s address via e-signature. The contract signature requires the execution of a transaction from the verified wallet. Users will be prompted to sign an on-chain message to complete this step.

Security

Audits

Pareto’s products have undergone multiple audits by both security firms and independent experts. A full list of security reports is available on the Audits page.

Monitoring

Pareto’s protocols are secured by the Hypernative Platform, which provides real-time monitoring and protection to prevent fund losses. The system detects and mitigates cyberattacks, automatically pausing on-chain smart contracts (see Pauser under Addresses) before any assets are compromised.

Continuous surveillance extends to the front end, smart contract vulnerabilities, private keys, and multi-signature wallets.

Vault blocks

Vault blocks are detailed blockchain-based snapshots of a vault’s state at a specific block height. They are used for calculating APR/APY, tracking liquidity, and generating analytics.

Structure

Each vault block object includes:

  • _id (string) — Unique identifier

  • vaultId (string) — Vault being tracked

  • vaultAddress (string) — Smart contract address of the vault

  • block (object):

    • number (number) — Block number

    • timestamp (number) — Unix timestamp of the block

  • APRs (object) — Non-compounded APRs:

    • BASE, HARVEST, REWARDS, GROSS, NET, FEE (number)

  • APYs (object) — Compounded yield rates:

    • BASE, HARVEST, REWARDS, GROSS, NET, FEE (number)

  • totalSupply (string) — Total shares issued by the vault

  • price (string) — Price per share

  • TVL (object) —

    • token (string) — TVL in vault token

    • USD (string) — TVL in USD

  • pools (array of objects) — Breakdown of pool-level performance:

    • address (string)

    • protocol (string)

    • rates: { supply: number, borrow: number }

    • utilization: { supplied: string, borrowed: string, rate: number }

    • available: { toBorrow: string, toWithDraw: string }

  • allocations (array) — Optional pool allocation breakdown

  • createdAt, updatedAt (string) — ISO timestamps

  • createdBy, updatedBy (string) — Actor IDs

Endpoints

Vault latest blocks

Vault latest blocks are real-time snapshots of the most recent state for each vault. Unlike vault blocks (historical), these represent the current or latest available data.

Endpoints

Audits
Sherlock
Link
1
2
Link
Hans Friese
Link
Sherlock
Link
Hans Friese
Link
Hans Friese
Link
Hans Friese
Link
Hans Friese
Link

#254839

#081912

#E3E8E2

#70B19E

#48685A

#D7E4EA

Cover
Cover
Cover
Cover
Cover
Cover

FAQs

What is USP?

USP is a credit-backed synthetic dollar, built on infrastructure tailor-made for financial institutions. USP uses the ERC-20 token standard.

Unlike traditional stablecoins that rely on fiat reserves or crypto collateral, USP is natively tied to real-world credit exposure. It serves as a foundational asset in Pareto’s on-chain credit ecosystem by enabling users to access, trade, and earn yield from private credit markets.

By combining DeFi composability with TradFi-grade credit underwriting, USP offers a decentralized and scalable alternative to the incumbent offering. One that’s programmable, capital-efficient, and aligned with institutional risk models.

What is sUSP and how does it work?

sUSP is the staked version of USP, designed to distribute the yield generated by Credit Vaults to stakers. When users stake USP, they receive sUSP, an ERC-4626 token that tracks the share of the Credit Vaults exposition.

  • Staking: USP holders can deposit into the sUSP contract in a permissionless way and receive sUSP in return.

  • Yield Accrual: As revenue is generated from the underlying credit activity (e.g., interest from institutional loans), it is periodically distributed to sUSP holders. This causes the exchange rate between sUSP and USP to increase, representing the accrued yield.

  • Unstaking: Users can redeem sUSP back into USP at any time, subject to protocol-defined conditions or cooldowns. The amount of USP received reflects the current exchange rate, including any earned yield.

What is USP backing?

USP is backed 1:1 by Credit Vaults (and USDS).

These funds are deposited into Credit Vaults and borrowed by vetted institutional borrowers to generate yield for stakers. Pareto’s Credit Vaults offers built-in risk controls such as:

  • Professional curators overseeing loan terms and counterparty risk

  • Institutional KYC and legal structuring

  • Transparent reporting and enforcement mechanisms

Additionally, USP token holders are backed by USP stakers (Junior tranche) and a Stability Fund to absorb any loss.

Is USP a stablecoin?

No, USP is not a stablecoin in the traditional sense. While it is soft-pegged to 1, it is better described as a credit-backed synthetic dollar. Unlike fiat-backed stablecoins (USDC, USDT), USP is backed by real-world credit positions, i.e. loans issued to vetted institutional borrowers through Pareto’s Credit Vaults.

How is the USP peg preserved?

Verified users maintain the peg through arbitrage and a controlled mint/redeem mechanism.

  • If USP falls below 1, users can buy it on the market and redeem it for 1 worth of stablecoins, driving USP price back up

  • If USP rises above 1, they can mint new USP by depositing stablecoins, increasing supply, and pushing the price down

Non-verified users can trade USP freely on decentralized exchanges but cannot access mint/redeem functions.

In case of borrower default, a Stability Fund covers losses first. If needed, sUSP holders absorb remaining losses by receiving less USP per staked token. The protocol can also burn excess USP to support peg stability.

Note: While staking offers yield, sUSP holders bear "junior risk", meaning they may absorb losses if borrowers default and the Stability Fund is insufficient. This tradeoff allows the system to prioritize peg stability for USP while rewarding active participants.

What is the Stability Fund? How does it work?

The Stability Fund is a reserve held by the protocol to absorb losses in the event of a borrower default. It acts as the first line of defense to protect the USP peg before any losses are passed on to sUSP holders. By covering shortfalls proactively, the fund helps maintain confidence in USP and reduces the likelihood of conversion slashing for stakers.

The Stability Fund will be gradually funded by a 5% fee on generated interest, allowing it to grow over time.

How can I get USP?

There are two ways to get USP:

  1. Mint via the Pareto app: Verified users can mint USP directly by depositing stablecoins into the protocol’s smart contract.

  2. Buy on the open market: Anyone can purchase USP from decentralized exchanges such as Uniswap or Curve, just like any other token.

Who can mint and redeem USP?

Only verified users can mint or redeem USP directly via the Pareto App. They can either issue new USP (minting) or convert USP back into stablecoins (redeeming), at a 1:1 ratio.

This permissioned model ensures regulatory compliance and controlled issuance tied directly to on-chain credit origination. It also helps maintain the integrity of the 1 peg by limiting mint/redeem access to trusted entities operating within Pareto’s credit infrastructure.

Non-verified users cannot mint or redeem USP but can still access USP through secondary markets.

How does USP manage redemptions?

Redemptions happen instantly via secondary markets or by burning the token on Pareto.

For sUSP, there’s a 7-day cooldown period, then a 1 to 30-day wait depending on CVs maturity since redemptions align with Credit Vault cycle lengths.

How can I earn with USP?

Users can earn yield by staking USP into the SUSP vault, Pareto’s yield-bearing layer for credit-backed dollars. Here’s how it works:

  • Users stake USP into the protocol to receive sUSP

  • As the protocol earns revenue from institutional lending activity, yield is distributed to sUSP holders.

  • The value of sUSP increases over time relative to USP, reflecting your accrued earnings.

  • Users can unstake anytime, converting sUSP back to USP at the prevailing exchange rate (subject to protocol conditions or cooldowns).

Is USP freely transferrable?

Yes. USP is fully transferable and freely tradable by anyone on supported decentralized exchanges. You can buy, sell, and use USP in DeFi protocols just like any other ERC-20 token.

However, USP minting, redeeming, and staking require users' verification.

What makes USP unique?
  • Yield from trusted, institutional partners

  • Backed by real-world credit

  • Built to deliver consistent, market-driven returns

  • Institutional-grade design, with open market access

  • High composability, that unlocks seamless DeFi integrations

Is USP safe to use?

USP inherits risk from the underlying credit strategies, but the system is designed with institutional risk controls, curated loan origination, and transparent reporting. While not risk-free, it aims to offer a more capital-efficient and transparent alternative to traditional dollar-pegged assets.

The USP system uses a two-tier risk structure:

  • Senior position -> USP holders These users are protected and can redeem USP at 1 unless extreme losses occur. They are last in line to absorb risk.

  • Junior position -> sUSP holders Users who stake USP into sUSP earn protocol yield but take on first-loss risk. If a borrower defaults and the Stability Fund is depleted, sUSP value may be reduced to protect USP.

This design mirrors traditional credit tranching by offering a boosted yield to junior participants in exchange for greater risk.

Tranching

Credit Vaults can optionally activate a tranching mechanism to allow users to tailor their lending experience to various risk appetites.

Senior class

This class offers intrinsic protection on funds, given by Junior deposits. Senior Tranche LPs intrinsically have a first lien on the underlying assets, i.e., they are first in line to be repaid in case of default (hack or loss of funds).

Junior class

This class offers a greater yield by dragging more exposure to the underlying yield. Junior Tranche LPs have a second lien or no lien at all in case of default (hack or loss of funds).

The Junior class is designed to receive a higher share of yield compared to the Senior one, to proportionally compensate for the higher risk taken.

Yield split

The Tranching feature relies on a unique mechanism that manages the return distribution dynamically conditional to the liquidity deposited on each side (Senior, Junior) of the Credit Vault.

  • Senior class receives most of the underlying yield when liquidity is low on the Junior side (low coverage), or receives a guaranteed minimum portion of the underlying yield when Junior liquidity is high (high coverage)

  • Junior class receives outperforming APYs, no matter the Senior class liquidity

Formulae

Liquidity ratios

First, we define the Senior and Junior TVL ratios as

TVL ratioSr=LiquiditySeniorLiquiditySenior+Junior\text{TVL ratio}_{Sr} = \frac{\text{Liquidity}_{Senior}}{\text{Liquidity}_{Senior + Junior}}TVL ratioSr​=LiquiditySenior+Junior​LiquiditySenior​​

TVL ratioJr=LiquidityJuniorLiquiditySenior+Junior\text{TVL ratio}_{Jr} = \frac{\text{Liquidity}_{Junior}}{\text{Liquidity}_{Senior + Junior}}TVL ratioJr​=LiquiditySenior+Junior​LiquidityJunior​​

Senior and Junior yields

The Senior return can be calculated as

\text{APY}_{Sr} = \text{Base APY} \times \text{Yield share}_{Sr} \qquad \tag{1}

where the Base APY is the underlying Tranches yield and the Yield share of the Senior side is a piecewise function conditional to the liquidity on the Senior tranche.

Yield shareSr={99%if TVL ratioSr≥99%LiquiditySeniorLiquiditySenior+Juniorif TVL ratioSr>50%50%if TVL ratioSr≤50%\text{Yield share}_{Sr} = \begin{dcases} 99\% & \text{if } \text{TVL ratio}_{Sr} \geq 99\% \\ \\ \dfrac{\text{Liquidity}_{Senior}}{\text{Liquidity}_{Senior + Junior}} & \text{if } \text{TVL ratio}_{Sr} > 50\% \\ \\ 50\% & \text{if } \text{TVL ratio}_{Sr} \leq 50\% \\ \end{dcases}Yield shareSr​=⎩⎨⎧​99%LiquiditySenior+Junior​LiquiditySenior​​50%​if TVL ratioSr​≥99%if TVL ratioSr​>50%if TVL ratioSr​≤50%​

The Junior return can be calculated as

\text{APY}_{Jr} = \frac{(\text{Base APY} - \text{APY}_{Sr}) \times \text{TVL ratio}_{Sr}}{\text{TVL ratio}_{Jr}} + \text{Base APY} \qquad \tag{2}

When Senior liquidity represents 50-99% of the funds in the Tranche, we use Equation (1) to compute the Yield share of the Senior side.

Alternatively, we use some fixed percentages. There are two hedge cases:

  1. The majority of the vault's liquidity lying on the Senior side (more than 99%)

  2. Less than half of the vault's liquidity lying on the Senior side (less than 50%)

Yield shareSr={99%if LiquiditySeniorLiquiditySenior+Junior≥99%50%if LiquiditySeniorLiquiditySenior+Junior≤50%\text{Yield share}_{Sr} = \begin{dcases} 99\% & \text{if } \dfrac{\text{Liquidity}_{Senior}}{\text{Liquidity}_{Senior + Junior}} \geq 99\% \\ \\ 50\% & \text{if } \dfrac{\text{Liquidity}_{Senior}}{\text{Liquidity}_{Senior + Junior}} \leq 50\% \\ \end{dcases}Yield shareSr​=⎩⎨⎧​99%50%​if LiquiditySenior+Junior​LiquiditySenior​​≥99%if LiquiditySenior+Junior​LiquiditySenior​​≤50%​

In the first case, we set the Yield share of the Senior class equal to 99% while in the second case, we set it equal to 50%. These two hedge cases link to the principle that

  • Senior class receives most of the underlying yield when liquidity is low on the Junior side (low coverage), or receives a guaranteed minimum portion of the underlying yield when Junior liquidity is high (high coverage)

  • Junior class receives outperforming APYs, no matter the Senior class liquidity

The guaranteed minimum portion, aka the Yield share of the Senior Tranches, has been set to half the Base APY (see HC#2) when the Senior liquidity is smaller than the Junior one.

Senior coverage and Junior overperformance

The formulas of the Senior coverage provided by the Junior counterparty and the Junior boosted yield vs the underlying return are

CoverageSr=LiquidityJuniorLiquiditySenior\text{Coverage}_{Sr} = \frac{\text{Liquidity}_{Junior}}{\text{Liquidity}_{Senior}}CoverageSr​=LiquiditySenior​LiquidityJunior​​

OverperformanceJr=APYJrBase APY\text{Overperformance}_{Jr} = \frac{\text{APY}_{Jr}}{\text{Base APY}}OverperformanceJr​=Base APYAPYJr​​

The Senior coverage should not be confused with the overall Tranche coverage that is computed in proportion to the whole tranche TVL

Tranche coverage=LiquidityJuniorLiquidityTranche\text{Tranche coverage} = \frac{\text{Liquidity}_{Junior}}{\text{Liquidity}_{Tranche}}Tranche coverage=LiquidityTranche​LiquidityJunior​​

Yield and loss scenarios

Let's assume to have a Credit Vault generating a 10% yield (base APY), where users deposit 10,000,000 DAI split as follows: 70% on the Senior class, and 30% on the Junior class.

Standard case

Between 50 and 99% of the total vault's liquidity lying on the Senior side

Side
Liquidity
Expected APY

Senior

8,000,000 DAI

8%

Junior

2,000,000 DAI

18%

The Senior Yield share is equal to 80%. Senior funds coverage is 25% and the Junior overperformance vs base APY is 1.8x. The Tranche coverage is 20%.

Hedge case #1

Majority of the total vault's liquidity lies on the Senior side (≥ 99%). See the Formulae section.

Side
Liquidity
Expected APY

Senior

9,999,900 DAI

10%

Junior

100 DAI

20%

The Senior Yield share is set to 99% (HC#1). Senior funds coverage is 0% and the Junior overperformance vs base APY is 1.99x. The Tranche coverage is 0% as well.

Hedge case #2

Less than half of the total vault's liquidity lies on the Senior side (≤ 50%). See the Formulae section.

Side
Liquidity
Expected APY

Senior

4,000,000 DAI

5%

Junior

6,000,000 DAI

13%

The Senior Yield share is set to 50% (HC#2). Senior funds coverage is 150% and the Junior overperformance vs base APY is 1.33x. The Tranche coverage is 60%.

Credit Vaults

For each vault deployed, the underlying token, main contract, strategy, LP token, and queue contract, if available, are listed. The ABI of the Credit Vault contracts can be found here:

Ethereum

Fasanara Digital

Description
Address

Bastion Trading

Description
Address

Adaptive Frontier

Description
Address

Optimism

FalconX

Description
Address

Arbitrum

Bastion Trading

Description
Address

Polygon

Bastion Trading

Description
Address

API

Pareto APIs provide access to campaign data, vault analytics, token information, and third-party integrated services.

This is the active major version v1 of the API. All endpoints listed are part of the v1 namespace.

Quick start

  1. Request an API key via . Once approved, you will receive a key for authentication

  2. Use your preferred HTTP client (e.g., Postman, Axios, cURL)

  3. Add your API key as a Bearer Token in the Authorization header

  4. Start by fetching vaults or campaign data:

Endpoints

A campaign is a points-based engagement program that allows users to earn rewards by interacting with Pareto.

  • GET /v1/campaigns — List all campaigns

  • GET /v1/campaigns/:campaignId — Get campaign by ID

  • GET /v1/campaigns/:campaignId/points — Get campaign points

  • GET /v1/chains — List supported chains

  • GET /v1/chains/:chainId — Get chain by ID

An entity managing or integrating with Pareto products.

  • GET /v1/operators — List all operators

  • GET /v1/operators/:operatorId — Get operator by ID

  • GET /v1/token-blocks — List all token blocks

  • GET /v1/token-blocks/:tokenBlockId — Get token block by ID

  • GET /v1/tokens — List all tokens

  • GET /v1/tokens/:tokenId — Get token by ID

  • GET /v1/transactions — List all protocol transactions

A yield-generating smart contract product.

  • GET /v1/vaults — List all vaults

  • GET /v1/vaults/:vaultId — Get vault by ID

  • GET /v1/vaults/performances — Vault performance overview

  • GET /v1/vaults/:vaultId/integrations — Integrations by vault ID

  • GET /v1/vault-blocks — List all vault blocks

  • GET /v1/vault-blocks/:vaultBlockId — Get vault block by ID

  • GET /v1/vault-latest-blocks — Latest block data for vaults

  • GET /v1/vault-categories — List all vault categories

  • GET /v1/vault-categories/:typeId — Get category by ID

A predefined period for vault accounting.

  • GET /v1/vault-epochs — List all vault epochs

  • GET /v1/vault-performances — List all performance metrics

  • GET /v1/vault-performances/:vaultPerformanceId — Get performance by ID

  • GET /v1/vault-types — List all vault types

  • GET /v1/vault-types/:typeId — Get vault type by ID

Listing

All listing endpoints across the API (e.g., /vaults, /transactions, /tokens, etc.) follow a consistent response format in consuming paginated data throughout the API:

  • data: an array of returned resources.

  • totalCount: the total number of resources matching the query, useful for pagination.

Pagination, sorting, fields

To control the number of items returned per request, you can use:

  • limit — Number of items to return (default: 50, max: 200)

  • offset — Number of items to skip before starting to collect the result set

The sort query parameter allows you to sort results by one or more fields:

  • Use field for ascending order

  • Use -field for descending order

Some endpoints support the fields parameter, which lets you request only specific fields per object:

This can be useful for optimizing network performance and response size.

Base URL
https://api.pareto.credit/
curl -H "Authorization: Bearer YOUR_API_KEY" https://api.pareto.credit/v1/vaults
{
  "data": [ /* items */ ],
  "totalCount": 123
}
GET /v1/vaults?limit=10&offset=20
GET /v1/vaults?sort=-createdAt
GET /v1/vaults?fields=_id,name,createdAt
this form
Campaigns
Chains
Operators
Token blocks
Tokens
Transactions
Vaults
Vault blocks
Vault categories
Vault epochs
Vault performances
Vault types

Token USDC

Contract

Strategy

LP token

Queue

Token USDC

Contract

Strategy

LP token

Token USDC

Contract

Strategy

LP token

Queue

Token USDC

Contract

Strategy

LP token

Queue

Token USDT

Contract

Strategy

LP token

Queue

Token USDT

Contract

Strategy

LP token

Queue

JSON

Allocation

This section describes how the USP board allocates collateral between the whitelisted yield sources. These are classified according to some liquidity tiers

  • T1: is a cash equivalent product, instantly redeemable (0-2 days) -->

  • T2: is a short-term yield product, redeemable in less than 1 week ( 7 days) -->

  • T3: is a long-term yield product, redeemable in less than 1 month (8-30 days) -->

The weights should satisfy the condition

Allocation rules

  1. Sort vaults by descending yield vs duration score (see )

  2. Fill Tier 2 weight up to the global cap . One-fourth of T2 allocations unlock every week and are constantly moved back to T1

  3. Allocate the remainder to Tier 3 until the target length (12d) is reached

where limits the exposure to T2 products: too small allocation decreases the yield, but too large one risks draining liquidity if many users redeem within one week.

Formulae

Given some key parameters:

  • = total collateral (USDC + USDS)

  • = net USP redemptions on the day

  • = APR and epoch (days) of vault

  • = daily standard deviation of redemptions (look-back )

  • = instant-service percentile (e.g. 97.5%)


To compute the instant-liquidity buffer (T1)

  1. Statistical need -->

    where days promised instant liquidity (usually 1) and

  2. Add operational cushion --> where of (oracle lag, gas spikes)

  3. Target balance -->

  4. Convert to portfolio weight

If the current then move funds into T1, otherwise sweep the surplus out of the best-scoring vault.

To allocate the surplus, we compute a yield vs duration scoring for every vault using the formula

where is the annualized fee, and is a factor used to penalize long-term strategies.

T3 allocation should be larger than the target length ( days)

where is an optional exposure limit to any single vault or protocol. It should be used only when two or more independent vaults exist.

A keeper routine should be set to rebalance funds either weekly or whenever

Initial parameters

The USP board can modify the allocation parameters. The default values are:

Variable
Description
Default value

Live vaults

Borrower
Fasanara Digital
Borrower
FalconX
Borrower
Bastion Trading
Borrower
Adaptive Frontier

List all vaults

get
Responses
200
A list of vaults
application/json
get
200

A list of vaults

Get vault by ID

get
Path parameters
vaultIdstringRequired
Responses
200
Single vault object
application/json
get
200

Single vault object

Aggregated vault performance list

get
Responses
200
Vaults performance metrics
application/json
get
200

Vaults performance metrics

Get integrations related to a vault

get
Path parameters
vaultIdstringRequired
Responses
200
Integration data
application/json
get
200

Integration data

List all tokens

get
Responses
200
A list of tokens
application/json
get
200

A list of tokens

Get token by ID

get
Path parameters
tokenIdstringRequired
Responses
200
Token details
application/json
get
200

Token details

List all transactions

get
Query parameters
typestringOptional
statusstringOptional
walletAddressstringOptional
vaultIdstringOptional
chainIdstringOptional
Responses
200
A list of transactions
application/json
get
200

A list of transactions

List all chains

get
Responses
200
A list of chains
application/json
get
200

A list of chains

Get chain by ID

get
Path parameters
chainIdstringRequired
Responses
200
Chain details
application/json
get
200

Chain details

List all vault types

get
Responses
200
A list of vault types
application/json
get
200

A list of vault types

Get vault type by ID

get
Path parameters
typeIdstringRequired
Responses
200
A single vault type
application/json
get
200

A single vault type

GET /v1/vaults HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "data": [
    {
      "_id": "text",
      "tokenId": "text",
      "chainId": "text",
      "typeId": "text",
      "categoryId": "text",
      "operatorIds": [
        "text"
      ],
      "name": "text",
      "address": "text",
      "symbol": "text",
      "protocol": "Idle",
      "contractType": "BestYield",
      "abi": [
        {}
      ],
      "description": {
        "en": "text"
      },
      "shortDescription": {
        "en": "text"
      },
      "caption": {
        "en": "text"
      },
      "keyInfo": [
        {
          "label": {
            "en": "text"
          },
          "value": {
            "en": "text"
          }
        }
      ],
      "visibility": "HIDDEN",
      "status": "PAUSED",
      "feePercentage": 1,
      "createdAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}
GET /v1/vaults/{vaultId} HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "_id": "text",
  "tokenId": "text",
  "chainId": "text",
  "typeId": "text",
  "categoryId": "text",
  "operatorIds": [
    "text"
  ],
  "name": "text",
  "address": "text",
  "symbol": "text",
  "protocol": "Idle",
  "contractType": "BestYield",
  "abi": [
    {}
  ],
  "description": {
    "en": "text"
  },
  "shortDescription": {
    "en": "text"
  },
  "caption": {
    "en": "text"
  },
  "keyInfo": [
    {
      "label": {
        "en": "text"
      },
      "value": {
        "en": "text"
      }
    }
  ],
  "visibility": "HIDDEN",
  "status": "PAUSED",
  "feePercentage": 1,
  "createdAt": "2025-06-29T11:55:54.957Z",
  "createdBy": "text",
  "updatedAt": "2025-06-29T11:55:54.957Z",
  "updatedBy": "text"
}
GET /v1/vaults/performances HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "data": [
    {}
  ],
  "totalCount": 1
}
GET /v1/vaults/{vaultId}/integrations HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "ANY_ADDITIONAL_PROPERTY": "anything"
}
GET /v1/tokens HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "data": [
    {
      "_id": "text",
      "name": "text",
      "symbol": "text",
      "decimals": 1,
      "address": "text",
      "chainId": "text",
      "logoURI": "text",
      "underlying": true,
      "createdAt": "2025-06-29T11:55:54.957Z",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}
GET /v1/tokens/{tokenId} HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "_id": "text",
  "name": "text",
  "symbol": "text",
  "decimals": 1,
  "address": "text",
  "chainId": "text",
  "logoURI": "text",
  "underlying": true,
  "createdAt": "2025-06-29T11:55:54.957Z",
  "updatedAt": "2025-06-29T11:55:54.957Z",
  "createdBy": "text",
  "updatedBy": "text"
}
GET /v1/transactions HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "data": [
    {
      "_id": "text",
      "type": "DEPOSIT",
      "status": "PENDING",
      "hash": "text",
      "chainId": "text",
      "walletAddress": "text",
      "vaultId": "text",
      "epochId": "text",
      "tokenId": "text",
      "amount": "text",
      "amountUSD": "text",
      "gasFeeUSD": "text",
      "block": {
        "number": 1,
        "timestamp": 1
      },
      "createdAt": "2025-06-29T11:55:54.957Z",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}
GET /v1/chains HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "data": [
    {
      "_id": "text",
      "name": "text",
      "hex": "text",
      "blocksPerYear": 1,
      "tokenSymbol": "text",
      "chainID": 1,
      "RPCs": [
        {
          "provider": "INFURA",
          "https": "text",
          "wss": "text",
          "name": "text",
          "isPublic": true
        }
      ],
      "color": "text",
      "isDisabled": true,
      "createdAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}
GET /v1/chains/{chainId} HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "_id": "text",
  "name": "text",
  "hex": "text",
  "blocksPerYear": 1,
  "tokenSymbol": "text",
  "chainID": 1,
  "RPCs": [
    {
      "provider": "INFURA",
      "https": "text",
      "wss": "text",
      "name": "text",
      "isPublic": true
    }
  ],
  "color": "text",
  "isDisabled": true,
  "createdAt": "2025-06-29T11:55:54.957Z",
  "createdBy": "text",
  "updatedAt": "2025-06-29T11:55:54.957Z",
  "updatedBy": "text"
}
GET /v1/vault-types HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "data": [
    {
      "_id": "text",
      "code": "text",
      "name": {
        "en": "text"
      },
      "description": {
        "en": "text"
      },
      "createdAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}
GET /v1/vault-types/{typeId} HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "_id": "text",
  "code": "text",
  "name": {
    "en": "text"
  },
  "description": {
    "en": "text"
  },
  "createdAt": "2025-06-29T11:55:54.957Z",
  "createdBy": "text",
  "updatedAt": "2025-06-29T11:55:54.957Z",
  "updatedBy": "text"
}
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
0xf6223C567F21E33e859ED7A045773526E9E3c2D5
0xC35D078092872Ec1f2ae82bcd6f0b6b89F0850de
0x45054c6753b4Bce40C5d54418DabC20b070F85bE
0x0b4F695B05902efc14344d19ED1d0B0E061C8A3E
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
0x4462eD748B8F7985A4aC6b538Dfc105Fce2dD165
0x06975bB418EFFB0029fe278A6fA15B92bb97496F
0xC49b4ECc14aa31Ef0AD077EdcF53faB4201b724c
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
0x14B8E918848349D1e71e806a52c13D4e0d3246E0
0xa30bE796FB2BAbF9228359E86A041c14e29f86Fc
0xae7913c672c7F1f76C2a1a0Ac4de97d082681234
0x5eCF8bF9eae51c2FF47FAc8808252FaCd8e36797
0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85
0xD2c0D848aA5AD1a4C12bE89e713E70B73211989B
0x2BCf124aa4f7F32f0fe54f498d924B934C942B31
0x24e16F9Fad32891f8bA69cE8fEdd273A2649331A
0x463465c334742D72907CA5fB97db44688B4EC3dC
0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9
0x3919396Cd445b03E6Bb62995A7a4CB2AC544245D
0x5b11507F8A91005aD1591F54ef64133AabA6d06E
0x97F476F664A95106931f78113489e0361Cf1c9Fa
0x133F1C751f25C2AAf0E83f0609A67074915144A4
0xc2132d05d31c914a87c6611c10748aeb04b58e8f
0xF9E2AE779a7d25cDe46FccC41a27B8A4381d4e52
0x4Ddb301403Ee3C4B4099ED128b34c36d86f6df35
0xaE65d6C295E4a28519182a632FB25b7C1966AED7
0xeAB324e9450d1EfFa087ccE8eff6C1FB476d60Ff
wsw_sws​
≤\leq≤
w7w_7w7​
w30w_{30}w30​
ws+w7+w30  =  1.w_s + w_{7} + w_{30} \;=\; 1.ws​+w7​+w30​=1.
SiS_iSi​
c7c_7c7​
c7c_7c7​
AAA
RdR_dRd​
ddd
APRi,τiAPR_{i, \tau_i}APRi,τi​​
iii
σw\sigma_wσw​
W≈90dW \approx 90dW≈90d
ppp
L=zp σw HL = z_p\,\sigma_w\,\sqrt{H}L=zp​σw​H​
H=H = H=
zp≈1.96  for p=97.5%z_p \approx 1.96 \; \text{for} \: p = 97.5\%zp​≈1.96forp=97.5%
buffermin⁡=L+κA\text{buffer}_{\min}=L+\kappa_Abuffermin​=L+κA​
κ≈1%\kappa \approx 1\%κ≈1%
AAA
BsUSDS=max⁡(buffermin⁡, Bmin⁡)B_{\text{sUSDS}}=\max \left(\text{buffer}_{\min},\,B_{\min}\right)BsUSDS​=max(buffermin​,Bmin​)
ws∗=BsUSDSAw_s^{*}=\dfrac{B_{\text{sUSDS}}}{A}ws∗​=ABsUSDS​​
ws<ws∗w_s < w_s^*ws​<ws∗​
iii
Si=APRi−fi1+λτiS_i = \dfrac{\text{APR}_i - f_i}{1 + \lambda \tau_i}Si​=1+λτi​APRi​−fi​​
fif_i fi​
λ≈0.04\lambda \approx 0.04λ≈0.04
τtarget≈12\tau_{\text{target}} \approx 12τtarget​≈12
∑iwiτi1−ws∗  ≤  τtarget\dfrac{\sum_i w_i \tau_i}{1 - w_s^{*}} \;\le\; \tau_{\text{target}}1−ws∗​∑i​wi​τi​​≤τtarget​
wi,max⁡w_{i, \max}wi,max​
∣(ws−wstarget)>ε∣| (w_s - w_{s_\text{target}}) > \varepsilon |∣(ws​−wstarget​​)>ε∣

Instant-redeem service level

97–99%

Operational cushion

1–2 % A

Converts “epoch-day” into APR penalty

0.03–0.05

Max weighted epoch

10–14 days

Upper bound on the total weight of the 7-day vault sleeve

20–30 % A

Optional per-vault cap. Use once the number of vaults is

off / 30 % A

Formulae

Curator

Pareto

Vertical

Basis Trading (delta neutral)

IRM

Variable rate, benchmarked to BTC-OI funding rate

Chain

Ethereum

Asset

USDC

Cycle length

One week

Buffer length

24 hours

Redemptions

Weekly, 7-day notice

Performance fee

20%

Vault page

Addresses

Curator

Vertical

Prime brokerage

IRM

Fixed rate

Chain

Optimism

Asset

USDC

Cycle length

One month

Buffer length

6 hours

Redemptions

Monthly, 1-month notice

Early exit

Enabled ()

Performance fee

10%

Vault page

Addresses

Curator

Pareto

Vertical

Market making

IRM

Fixed rate

Chain

Polygon, Arbitrum, (Ethereum)

Asset

USDT, (USDC)

Cycle length

One month

Buffer length

6 hours

Redemptions

Monthly, 1-month notice

Early exit

Enabled ()

Performance fee

10%

Vault page

Addresses

Curator

Pareto

Vertical

HFT Trading

IRM

Fixed rate

Chain

Ethereum

Asset

USDC

Cycle length

One week

Buffer length

24 hours

Redemptions

Weekly, 7-day notice

Early exit

Enabled ()

Performance fee

10%

Vault page

Addresses

Fasanara Digital
FalconX
Bastion Trading
Adaptive Frontier

List all token blocks

get
Responses
200
A list of token blocks
application/json
get
200

A list of token blocks

Get token block by ID

get
Path parameters
tokenBlockIdstringRequired
Responses
200
Token block details
application/json
get
200

Token block details

List all vault categories

get
Responses
200
A list of vault categories
application/json
get
200

A list of vault categories

Get vault category by ID

get
Path parameters
typeIdstringRequired
Responses
200
Vault category details
application/json
get
200

Vault category details

List all operators

get
Responses
200
A list of operators
application/json
get
200

A list of operators

Get operator by ID

get
Path parameters
operatorIdstringRequired
Responses
200
Operator details
application/json
get
200

Operator details

GET /v1/token-blocks HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "data": [
    {
      "_id": "text",
      "tokenId": "text",
      "chainId": "text",
      "blockNumber": 1,
      "price": 1,
      "liquidity": 1,
      "volume": 1,
      "timestamp": "2025-06-29T11:55:54.957Z",
      "createdAt": "2025-06-29T11:55:54.957Z",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}
GET /v1/token-blocks/{tokenBlockId} HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "_id": "text",
  "tokenId": "text",
  "chainId": "text",
  "blockNumber": 1,
  "price": 1,
  "liquidity": 1,
  "volume": 1,
  "timestamp": "2025-06-29T11:55:54.957Z",
  "createdAt": "2025-06-29T11:55:54.957Z",
  "updatedAt": "2025-06-29T11:55:54.957Z",
  "createdBy": "text",
  "updatedBy": "text"
}
GET /v1/vault-categories HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "data": [
    {
      "_id": "text",
      "typeId": "text",
      "name": {
        "ANY_ADDITIONAL_PROPERTY": "text"
      },
      "description": {
        "ANY_ADDITIONAL_PROPERTY": "text"
      },
      "icon": "text",
      "createdAt": "2025-06-29T11:55:54.957Z",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}
GET /v1/vault-categories/{typeId} HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "_id": "text",
  "typeId": "text",
  "name": {
    "ANY_ADDITIONAL_PROPERTY": "text"
  },
  "description": {
    "ANY_ADDITIONAL_PROPERTY": "text"
  },
  "icon": "text",
  "createdAt": "2025-06-29T11:55:54.957Z",
  "updatedAt": "2025-06-29T11:55:54.957Z",
  "createdBy": "text",
  "updatedBy": "text"
}
GET /v1/operators HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "data": [
    {
      "_id": "text",
      "name": "text",
      "description": "text",
      "image": "text",
      "vaults": [
        "text"
      ],
      "createdAt": "2025-06-29T11:55:54.957Z",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}
GET /v1/operators/{operatorId} HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "_id": "text",
  "name": "text",
  "description": "text",
  "image": "text",
  "vaults": [
    "text"
  ],
  "createdAt": "2025-06-29T11:55:54.957Z",
  "updatedAt": "2025-06-29T11:55:54.957Z",
  "createdBy": "text",
  "updatedBy": "text"
}
Δ≥1\Delta \geq 1Δ≥1
Δ≥1\Delta \geq 1Δ≥1
Δ≥1\Delta \geq 1Δ≥1
Link
Link
M11 Credit
Link
Link
Link
Link
Link
Link

List all vault epochs

get
Responses
200
A list of vault epochs
application/json
get
GET /v1/vault-epochs HTTP/1.1
Host: api.pareto.credit
Accept: */*
200

A list of vault epochs

{
  "data": [
    {
      "_id": "text",
      "vaultId": "text",
      "vaultAddress": "text",
      "block": {
        "number": 1,
        "timestamp": 1
      },
      "count": 1,
      "status": "WAITING",
      "startDate": "2025-06-29T11:55:54.957Z",
      "endDate": "2025-06-29T11:55:54.957Z",
      "startCureDate": "2025-06-29T11:55:54.957Z",
      "apr": 1,
      "lastApr": 1,
      "expectedInterest": "text",
      "unclaimedFees": "text",
      "deposits": "text",
      "duration": 1,
      "bufferDuration": 1,
      "withdrawType": "INSTANT",
      "withdraws": {
        "amount": "text",
        "fees": "text"
      },
      "depositQueue": {
        "amount": "text",
        "lastAmount": "text",
        "isInstant": true
      },
      "withdrawQueue": {
        "amount": "text",
        "lastAmount": "text",
        "isInstant": true
      },
      "instantWithdraws": {
        "allowed": true,
        "delay": 1,
        "amount": "text",
        "aprDelta": 1,
        "deadline": "2025-06-29T11:55:54.957Z",
        "disabled": true
      },
      "createdAt": "2025-06-29T11:55:54.957Z",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}

List all campaigns

get
Responses
200
A list of campaigns
application/json
get
GET /v1/campaigns HTTP/1.1
Host: api.pareto.credit
Accept: */*
200

A list of campaigns

{
  "data": [
    {
      "_id": "text",
      "code": "text",
      "name": {
        "ANY_ADDITIONAL_PROPERTY": "text"
      },
      "description": {
        "ANY_ADDITIONAL_PROPERTY": "text"
      },
      "rules": [
        {
          "name": {
            "ANY_ADDITIONAL_PROPERTY": "text"
          },
          "description": {
            "ANY_ADDITIONAL_PROPERTY": "text"
          },
          "trigger": "DEPOSIT",
          "deposit": {
            "type": "BALANCE",
            "value": 1
          },
          "reward": {
            "type": "AMOUNT",
            "value": 1
          },
          "frequency": {
            "value": 1,
            "unit": "seconds"
          }
        }
      ],
      "referrals": [
        {
          "code": "text",
          "isActive": true
        }
      ],
      "startDate": "2025-06-29T11:55:54.957Z",
      "endDate": "2025-06-29T11:55:54.957Z",
      "link": "text",
      "galxeId": 1,
      "createdAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}

Get campaign by ID

get
Path parameters
campaignIdstringRequired
Responses
200
Campaign details
application/json
get
GET /v1/campaigns/{campaignId} HTTP/1.1
Host: api.pareto.credit
Accept: */*
200

Campaign details

{
  "_id": "text",
  "code": "text",
  "name": {
    "ANY_ADDITIONAL_PROPERTY": "text"
  },
  "description": {
    "ANY_ADDITIONAL_PROPERTY": "text"
  },
  "rules": [
    {
      "name": {
        "ANY_ADDITIONAL_PROPERTY": "text"
      },
      "description": {
        "ANY_ADDITIONAL_PROPERTY": "text"
      },
      "trigger": "DEPOSIT",
      "deposit": {
        "type": "BALANCE",
        "value": 1
      },
      "reward": {
        "type": "AMOUNT",
        "value": 1
      },
      "frequency": {
        "value": 1,
        "unit": "seconds"
      }
    }
  ],
  "referrals": [
    {
      "code": "text",
      "isActive": true
    }
  ],
  "startDate": "2025-06-29T11:55:54.957Z",
  "endDate": "2025-06-29T11:55:54.957Z",
  "link": "text",
  "galxeId": 1,
  "createdAt": "2025-06-29T11:55:54.957Z",
  "createdBy": "text",
  "updatedAt": "2025-06-29T11:55:54.957Z",
  "updatedBy": "text"
}
ppp
κ\kappaκ
λ\lambdaλ
τtarget\tau_{\text{target}}τtarget​
c7c_7c7​
wi,max⁡w_{i, \max}wi,max​
≥3\geq 3≥3

Integrators

This guide describes how to integrate Credit Vaults into Web3 applications using both the Pareto REST API and smart contracts. It is intended for technical audiences familiar with Web3 and frontend frameworks.

Smart contract instantiation

To interact with on-chain vaults, tokens, and queue contracts, a Web3 contract instance must be created using the ABI and contract address:

This pattern is required for calling methods such as depositAA, requestWithdraw, approve. Refer to the for full syntax details.

API access

All API routes below belong to the public Pareto API at https://api.pareto.credit. Refer to the for a complete overview.

1. Required vault data

These steps outline the minimum data required to render a vault and enable interactions.

1

Load

Use either:

  • GET /v1/vaults/{_id} — by ID

  • GET /v1/vaults?address=0x... — by address

Only vaults with visibility: PUBLIC should be displayed to users.

2

Retrieve Signatures

Each vault contains a signatures array of the form:

Filter all entries where entity === 'LENDER'and use the _id values to load them. This returns the full signature definitions required to enable future user interactions.

3

Retrieve underlying

Retrieve token information with:

GET /v1/tokens/{vault.tokenId}

4

Fetch latest

Fetch up-to-date vault metrics. This includes share price, APRs, TVL, and queue configuration.

GET /v1/vault-latest-block?vaultId={vault._id}

2. Required wallet access data

Defines the required checks and data fetches needed immediately after wallet connection to verify access and authorization for vault operations.

1

Check wallet access

To verify if a wallet is allowed to interact with the vault, instantiate the contract using the cdoEpoch ABI and address retrieved from the vault JSON:

If isAllowed is false, initiate a KYC flow using . Only after KYC is completed, it's possible to proceed with next steps.

2

Signature Validation

Check if the required signatures have been signed:

GET /v1/signatures/{signatureId}/check?walletAddress=0x...123

otherwise

Submit the signed hash:

POST /v1/signatures/{signatureId}/sign

3

Retrieve Wallet Position

Retrieve the wallet position to track users' deposits, claims, and balances.

3. Deposit flow

Outlines the required contract state and transactions to successfully execute a deposit into a vault.

1

Verify allowance and balance

Instantiate the token contract using the vault token ABI and address:

Spender can be found in:

  • vault.cdoEpoch.address if NETTING

  • vault.depositQueue.address if RUNNING

2

Approve token spending

Make sure the amount respects the token's decimals (6 for USDC, USDT, 18 for the majority of ERC-20 tokens).

3

Submit Deposit Transaction

4. Withdraw flow

Describes how to prepare, calculate, and submit a withdrawal request from a vault, depending on its current status and configuration.

1

Fetch user balance and max withdrawable amount

2

Check allowance

The allowance must be verified only when the vault is in RUNNING state and uses the withdrawQueue. In this case, the withdrawQueue contract address should be used as spender.

3

Compute the LP tokens required

4

Submit withdrawal request

Track requests in the block.requests array

Managing requests

All deposit requests (during the RUNNING state), and all withdrawals (instant or standard) are tracked under the requests array of the vaultBlock object. Each entry in this array represents a user-initiated interaction awaiting processing.

where

  • type: Indicates if it's a DEPOSIT, WITHDRAW, or REDEEM.

  • status: Tracks the lifecycle of the request (e.g., PENDING, CLAIMABLE, etc.).

  • isInstant: Only present for withdrawals that qualify as "instant".

  • block: Indicates the vault block in which the request was recorded.

Requests are retrieved from the latest vault block:

Deposit requests

  • Cancel the request if status === 'PENDING'

  • Claim the request if status === 'CLAIMED'

Redeem requests

Handled via the main vault contract vault.cdoEpoch

  • If status === 'CLAIMED':

  • If request.isInstant === true:

Withdraw requests

Handled via the queue contract vault.cdoEpoch.withdrawQueue

  • If status === 'CLAIMED'

const contract = new web3.eth.Contract(abi, address);
interface VaultSignature {
  _id: string;
  entity: "ALL" | "LENDER" | "MANAGER";
}
GET /v1/signatures?_id=signatureId1,signatureId2
const cdoEpochContract = new web3.eth.Contract(
  vault.cdoEpoch.abi,
  vault.cdoEpoch.address
);
const isAllowed = await cdoEpochContract.methods
  .isWalletAllowed(walletAddress)
  .call();
const hash = await web3.eth.personal.sign(
  atob(walletMessage),
  walletAddress,
  ""
);
GET /v1/vaults/{vaultId}/position?walletAddress={walletAddress}
const tokenContract = new web3.eth.Contract(token.abi, token.address);
const allowance = await tokenContract.methods
  .allowance(walletAddress, spenderAddress)
  .call({ from: walletAddress });
const balance = await tokenContract.methods
  .balanceOf(walletAddress)
  .call({ from: walletAddress });
await tokenContract.methods
  .approve(spenderAddress, amount)
  .send({ from: walletAddress });
// during NETTING period
await cdoEpochContract.methods.depositAA(amount).send({ from: walletAddress });
// during cycle RUNNING
await depositQueueContract.methods
  .requestDeposit(amount)
  .send({ from: walletAddress });
const vaultTokenContract = new web3.eth.Contract(
  vaultToken.abi,
  vaultToken.address
);
const balance = await vaultTokenContract.methods
  .balanceOf(walletAddress)
  .call({ from: walletAddress });
const maxWithdrawable = await cdoEpochContract.methods
  .maxWithdrawable(walletAddress, vault.address)
  .call({ from: walletAddress });
const spender = vault.cdoEpoch.withdrawQueue.address;
const allowance = await tokenContract.methods
  .allowance(walletAddress, spender)
  .call({ from: walletAddress });
const percentage = 1000000 / maxWithdrawable;
const lpAmount = LPDeposited * percentage;
// during NETTING period
await vaultContract.methods
  .requestWithdraw(lpAmount, vault.address)
  .send({ from: walletAddress });
// during cycle RUNNING
await withdrawQueueContract.methods
  .requestWithdraw(lpAmount)
  .send({ from: walletAddress });
Request schema
interface VaultBlockRequest {
  type: "DEPOSIT" | "WITHDRAW" | "REDEEM";
  amount: iBigInt;
  block: Block;
  isInstant?: boolean;
  requestedOn: string;
  walletId: string;
  walletAddress: string;
  status:
    | "PENDING"
    | "PROCESSED"
    | "CLAIMABLE"
    | "INSTANT_CLAIMABLE"
    | "CLAIMED";
  epochNumber?: number;
}
GET /v1/vault-latest-block?vaultId={vaultId}
await cdoEpochContract.methods
  .deleteRequest(request.epochNumber)
  .send({ from: walletAddress });
await cdoEpochContract.methods
  .claimDepositRequest(request.epochNumber)
  .send({ from: walletAddress });
await cdoEpochContract.methods
  .claimWithdrawRequest(request.epochNumber)
  .send({ from: walletAddress });
await cdoEpochContract.methods
  .claimInstantWithdrawRequest(request.epochNumber)
  .send({ from: walletAddress });
await withdrawQueueContract.methods
  .claimWithdrawRequest(request.epochNumber)
  .send({ from: walletAddress });
Web3.js documentation
API chapter
Vault Entity
Token
Vault Block
Keyring Connect SDK
def rebalance():
    A = current_AUM()
    sigma_w = stdev(redemptions, window=W)
    L = z_p * sigma_w * sqrt(H)
    B_s = max(L + kappa * A, B_min)
    w_s_target = B_s / A

    scores = [
        (i, (apr[i] - fee[i]) / (1 + lambda_ * tau[i]))
        for i in vaults
    ]
    scores.sort(key=lambda x: x[1], reverse=True)

    alloc = {"sUSDS": w_s_target}
    remaining = 1 - w_s_target
    w7 = 0

    for i, _ in scores:
        if tau[i] <= 7 and w7 < c7:                 # fill T2
            x = min(c7 - w7, remaining)
            alloc[i] = x
            w7 += x
            remaining -= x
        elif remaining > 0:                         # fill T3
            alloc[i] = remaining
            remaining = 0
        if remaining <= 0:
            break

    execute_onchain_swaps(alloc)

Overview

Welcome to Pareto’s official documentation! Pareto is a private credit marketplace that connects institutional lenders and borrowers, offering scalable yield opportunities and bridging institutional capital with on-chain credit markets. Designed for asset managers, digital asset funds, and institutional investors, our comprehensive infrastructure provides seamless access to regulatory-compliant alternative credit solutions. Built on transparency, scalability, and automation, Pareto’s Credit Vaults eliminate bureaucratic friction, reduce operational costs, and enhance capital efficiency.

Whether you're a liquidity provider, borrower, curator, or integrator, here you will find everything you need to understand how to securely and efficiently interact with the protocol and its components.

List the latest block snapshot per vault

get
Responses
200
Latest vault state per block
application/json
get
GET /v1/vault-latest-blocks HTTP/1.1
Host: api.pareto.credit
Accept: */*
200

Latest vault state per block

{
  "data": [
    {
      "vaultId": "text",
      "vaultAddress": "text",
      "block": {
        "number": 1,
        "timestamp": 1
      },
      "TVL": {
        "token": "text",
        "USD": "text"
      },
      "price": "text",
      "APRs": {
        "BASE": 1,
        "HARVEST": 1,
        "REWARDS": 1,
        "GROSS": 1,
        "NET": 1,
        "FEE": 1
      },
      "createdAt": "2025-06-29T11:55:54.957Z",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}

List all vault blocks

get
Responses
200
A list of vault blocks
application/json
get
200

A list of vault blocks

Get vault block by ID

get
Path parameters
vaultBlockIdstringRequired
Responses
200
Vault block details
application/json
get
200

Vault block details

GET /v1/vault-blocks HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "data": [
    {
      "_id": "text",
      "vaultId": "text",
      "vaultAddress": "text",
      "block": {
        "number": 1,
        "timestamp": 1
      },
      "APRs": {
        "BASE": 1,
        "HARVEST": 1,
        "REWARDS": 1,
        "GROSS": 1,
        "NET": 1,
        "FEE": 1
      },
      "APYs": {
        "BASE": 1,
        "HARVEST": 1,
        "REWARDS": 1,
        "GROSS": 1,
        "NET": 1,
        "FEE": 1
      },
      "totalSupply": "text",
      "price": "text",
      "TVL": {
        "token": "text",
        "USD": "text"
      },
      "pools": [
        {
          "address": "text",
          "protocol": "text",
          "rates": {
            "supply": 1,
            "borrow": 1
          },
          "utilization": {
            "supplied": "text",
            "borrowed": "text",
            "rate": 1
          },
          "available": {
            "toBorrow": "text",
            "toWithDraw": "text"
          }
        }
      ],
      "allocations": [],
      "createdAt": "2025-06-29T11:55:54.957Z",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}
GET /v1/vault-blocks/{vaultBlockId} HTTP/1.1
Host: api.pareto.credit
Accept: */*
{
  "_id": "text",
  "vaultId": "text",
  "vaultAddress": "text",
  "block": {
    "number": 1,
    "timestamp": 1
  },
  "APRs": {
    "BASE": 1,
    "HARVEST": 1,
    "REWARDS": 1,
    "GROSS": 1,
    "NET": 1,
    "FEE": 1
  },
  "APYs": {
    "BASE": 1,
    "HARVEST": 1,
    "REWARDS": 1,
    "GROSS": 1,
    "NET": 1,
    "FEE": 1
  },
  "totalSupply": "text",
  "price": "text",
  "TVL": {
    "token": "text",
    "USD": "text"
  },
  "pools": [
    {
      "address": "text",
      "protocol": "text",
      "rates": {
        "supply": 1,
        "borrow": 1
      },
      "utilization": {
        "supplied": "text",
        "borrowed": "text",
        "rate": 1
      },
      "available": {
        "toBorrow": "text",
        "toWithDraw": "text"
      }
    }
  ],
  "allocations": [],
  "createdAt": "2025-06-29T11:55:54.957Z",
  "updatedAt": "2025-06-29T11:55:54.957Z",
  "createdBy": "text",
  "updatedBy": "text"
}

Vault performances

Vault performances track yield metrics, user activity, and reward distributions for vaults. These metrics are used in analytics, reporting, and performance visualization on Pareto.

Structure

Each vault performance object includes:

  • _id (string) — Unique identifier

  • vaultId (string) — Vault being tracked

  • vaultBlockId (string) — Related vault block reference

  • block (object) — Block information:

    • number (number) — Block number

    • timestamp (number) — Unix timestamp

  • age (number) — Block age in seconds

  • holders (number) — Number of unique users in the vault

  • realizedAPY (number) — Realized annual percentage yield

  • accruedRewards (array of objects) —

    • tokenId (string) — Reward token ID

    • amount (string) — Raw amount of rewards

    • amountUSD (string) — Value in USD

    • APR (number) — APR contribution

    • percentage (number) — Share of total reward

  • earnings (object) —

    • USD (string) — USD-denominated earnings

    • token (string) — Token earnings amount

    • percentage (number) — Share of vault value

  • createdAt, updatedAt (string) — ISO 8601 timestamps

  • createdBy, updatedBy (string) — Actor IDs

Endpoints

List all vault performance entries

get
Responses
200
Vault performance data
application/json
get
GET /v1/vault-performances HTTP/1.1
Host: api.pareto.credit
Accept: */*
200

Vault performance data

{
  "data": [
    {
      "_id": "text",
      "vaultId": "text",
      "vaultBlockId": "text",
      "block": {
        "number": 1,
        "timestamp": 1
      },
      "age": 1,
      "holders": 1,
      "realizedAPY": 1,
      "accruedRewards": [
        {
          "tokenId": "text",
          "amount": "text",
          "amountUSD": "text",
          "APR": 1,
          "percentage": 1
        }
      ],
      "earnings": {
        "USD": "text",
        "token": "text",
        "percentage": 1
      },
      "createdAt": "2025-06-29T11:55:54.957Z",
      "updatedAt": "2025-06-29T11:55:54.957Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
  ],
  "totalCount": 1
}

Get vault performance by ID

get
Path parameters
vaultPerformanceIdstringRequired
Responses
200
Vault performance entry
application/json
get
GET /v1/vault-performances/{vaultPerformanceId} HTTP/1.1
Host: api.pareto.credit
Accept: */*
200

Vault performance entry

{
  "_id": "text",
  "vaultId": "text",
  "vaultBlockId": "text",
  "block": {
    "number": 1,
    "timestamp": 1
  },
  "age": 1,
  "holders": 1,
  "realizedAPY": 1,
  "accruedRewards": [
    {
      "tokenId": "text",
      "amount": "text",
      "amountUSD": "text",
      "APR": 1,
      "percentage": 1
    }
  ],
  "earnings": {
    "USD": "text",
    "token": "text",
    "percentage": 1
  },
  "createdAt": "2025-06-29T11:55:54.957Z",
  "updatedAt": "2025-06-29T11:55:54.957Z",
  "createdBy": "text",
  "updatedBy": "text"
}