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...

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.

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

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.

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.

Users

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

USP

Ethereum

USP

Description
Address

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

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

Contract

0x97cCC1C046d067ab945d3CF3CC6920D3b1E54c88

Staking (sUSP)

0x271C616157e69A43B4977412A64183Cf110Edf16

Guides

Addresses

Product

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

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

Governance

Ethereum

Description
Address

Media kit

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

About Pareto

Tagline

Pareto is an on-chain private credit marketplace.

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 via Keyring before being allowed to interact with Credit Vaults.

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

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

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

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

Verification

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

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.

Keyring

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.

  • verification

    Pauser multisig

    Optimism

    Description
    Address

    Timelock

    Treasury multisig

    Arbitrum

    Description
    Address

    Timelock

    Treasury multisig

    Polygon

    Description
    Address

    Timelock

    Treasury multisig

    Timelock

    0xDa86e15d0Cda3A05Db930b248d7a2f775e575A44

    Treasury multisig

    0xFb3bD022D5DAcF95eE28a6B07825D4Ff9C5b3814

    Developers multisig

    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.

    Typography

    Primary font: GT Sectra

    Secondary font: GT America Mono

    Colors

    Primary colors

    Secondary colors

    258KB
    Pareto_brand_assets.zip
    archive
    Open

    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 Credit Vault LP tokens 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 Credit Vault LP tokens representing his position in the pool after the new lending cycle starts

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

    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

    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

  • 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

    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 () by depositing stablecoins, e.g. USDC, USDS, into the ParetoDollar contract. The contract mints USP and deposits the underlying assets into . 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 compliant yield sources to process redeems faster.

    The 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

    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

    sUSP

    Once USP is staked into sUSP, users can earn yield from the interest generated by . 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

    Acquisition
    • Stake and unstake USP through 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.

    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 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

    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.

    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 : 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 or , just like any other token.

    Who can mint and redeem USP?

    Only verified users can mint or redeem USP directly via the . 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.

    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

    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.

    Audits

    Date
    Scope
    Auditor
    Report

    Aug 2025

    Credit vaults

    Sherlock ()

    Apr 2025

    USP

    Apr 2025

    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

    • createdAt, updatedAt (string) — ISO timestamps

    • createdBy, updatedBy (string) — System actor IDs

    Endpoints

    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

    • earnings (object) —

      • USD (string) — USD-denominated earnings

      • token (string) — Token earnings amount

    • createdAt, updatedAt (string) — ISO 8601 timestamps

    • createdBy, updatedBy (string) — Actor IDs

    Endpoints

    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)

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

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

    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.

    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.

    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

    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

    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

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

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

    ERC-20
    Credit Vaults
    ERC-4626
    allocation
    Credit Vaults
    Pareto's app

    Transparent reporting and enforcement mechanisms

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

    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.

    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).

  • Built to deliver consistent, market-driven returns
    • Institutional-grade design, with open market access

    • High composability, that unlocks seamless DeFi integrations

    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.

    ERC-4626
    Pareto app
    Uniswap
    Curve
    Pareto App
    0xe8eA8bAE250028a8709A3841E0Ae1a44820d677b
    0xBaeCba470C229984b75BC860EFe8e97AE082Bb9f
    0xa3a3741c48298e21EEbE5A59bEAF6f89DC0E0c4c
    0xFDbB4d606C199F091143BD604C85c191a526fbd0
    0xB988641E8D493B5BfF65e63819975b6B33477057
    0xF40d482D7fc94C30b256Dc7E722033bae68EcF90
    0x45f4fb4D0CCC439bB7B85Ba63064958ab7e31EE4
    0x61A944Ca131Ab78B23c8449e0A2eF935981D5cF6

    USP

    X77 (1, 2)

    Link

    Apr 2025

    USP

    Hans Friese

    Link

    Jan 2025

    Credit vaults

    Sherlock

    Link

    Nov 2024

    CVs withdraw queue

    Hans Friese

    Link

    Oct 2024

    CVs deposit queue

    Hans Friese

    Link

    Oct 2024

    Credit vaults

    Hans Friese

    Link

    Aug 2024

    Credit vaults

    Hans Friese

    Link

    0x52
    Link
    Sherlock
    Link

    #254839

    #081912

    #E3E8E2

    #70B19E

    #48685A

    #D7E4EA

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

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

  • fee (number, optional) — Optional oracle fee

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

  • amountUSD (string) — Value in USD

  • APR (number) — APR contribution

  • percentage (number) — Share of total reward

  • percentage (number) — Share of vault value

    linkedIn (string)

  • crunchbase (string)

  • 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

    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.

    The Junior return can be calculated as

    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%)

    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

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

    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%.

    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

    Credit Vault LP tokens

    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)

    • 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

    List all vault categories

    get
    Responses
    200

    A list of vault categories

    application/json

    Get vault category by ID

    get
    Path parameters
    typeIdstringRequired
    Responses
    200

    Vault category details

    application/json
    get
    /vault-categories/{typeId}
    \text{APY}_{Sr} = \text{Base APY} \times \text{Yield share}_{Sr} \qquad \tag{1}
    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%​
    \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}
    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%​
    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​​
    Tranche coverage=LiquidityJuniorLiquidityTranche\text{Tranche coverage} = \frac{\text{Liquidity}_{Junior}}{\text{Liquidity}_{Tranche}}Tranche coverage=LiquidityTranche​LiquidityJunior​​
    get
    /vault-categories
    200

    A list of vault categories

    200

    Vault category details

    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-12-10T01:42:54.082Z",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "_id": "text",
      "typeId": "text",
      "name": {
        "ANY_ADDITIONAL_PROPERTY": "text"
      },
      "description": {
        "ANY_ADDITIONAL_PROPERTY": "text"
      },
      "icon": "text",
      "createdAt": "2025-12-10T01:42:54.082Z",
      "updatedAt": "2025-12-10T01:42:54.082Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
    GET /v1/vault-categories/{typeId} HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    

    rates: { supply: number, borrow: number }

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

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

  • 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) --> wsw_sws​

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

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

    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

    Initial parameters

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

    Variable
    Description
    Default value

    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 this form. 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/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.

    List all vault epochs

    get
    Responses
    200

    A list of vault epochs

    application/json
    get
    /vault-epochs
    200

    A list of vault epochs

    List all chains

    get
    Responses
    200

    A list of chains

    application/json
    get
    /chains

    Get chain by ID

    get
    Path parameters
    chainIdstringRequired
    Responses
    200

    Chain details

    application/json
    get
    /chains/{chainId}

    List all token blocks

    get
    Responses
    200

    A list of token blocks

    application/json
    get
    /token-blocks

    Get token block by ID

    get
    Path parameters
    tokenBlockIdstringRequired
    Responses
    200

    Token block details

    application/json
    get
    /token-blocks/{tokenBlockId}
    Base URL
    https://api.pareto.credit/
    GET /v1/vaults/:vaultId/integrations — Integrations by vault ID
    Campaigns
    Chains
    Operators
    Token blocks
    Tokens
    Transactions
    Vaults
    Vault blocks
    Vault categories
    Vault epochs
    Vault performances
    Vault types
    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
    GET /v1/vault-epochs HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    {
      "data": [
        {
          "_id": "text",
          "vaultId": "text",
          "vaultAddress": "text",
          "block": {
            "number": 1,
            "timestamp": 1
          },
          "count": 1,
          "status": "WAITING",
          "startDate": "2025-12-10T01:42:54.082Z",
          "endDate": "2025-12-10T01:42:54.082Z",
          "startCureDate": "2025-12-10T01:42:54.082Z",
          "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-12-10T01:42:54.082Z",
            "disabled": true
          },
          "createdAt": "2025-12-10T01:42:54.082Z",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    = 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 -->

    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

    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

    Instant-redeem service level

    97–99%

    Operational cushion

    1–2 % A

    Converts “epoch-day” into APR penalty

    0.03–0.05

    Max weighted epoch

    Formulae
    200

    A list of chains

    200

    Chain details

    200

    A list of token blocks

    200

    Token block details

    Live vaults

    Borrower
    Fasanara Digital
    GET /v1/chains HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/chains/{chainId} HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/token-blocks HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/token-blocks/{tokenBlockId} 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-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "_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-12-10T01:42:54.082Z",
      "createdBy": "text",
      "updatedAt": "2025-12-10T01:42:54.082Z",
      "updatedBy": "text"
    }
    {
      "data": [
        {
          "_id": "text",
          "tokenId": "text",
          "chainId": "text",
          "blockNumber": 1,
          "price": 1,
          "liquidity": 1,
          "volume": 1,
          "timestamp": "2025-12-10T01:42:54.082Z",
          "createdAt": "2025-12-10T01:42:54.082Z",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "_id": "text",
      "tokenId": "text",
      "chainId": "text",
      "blockNumber": 1,
      "price": 1,
      "liquidity": 1,
      "volume": 1,
      "timestamp": "2025-12-10T01:42:54.082Z",
      "createdAt": "2025-12-10T01:42:54.082Z",
      "updatedAt": "2025-12-10T01:42:54.082Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
    Convert to portfolio weight
    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<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​​)>ε∣

    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

    ppp
    κ\kappaκ
    λ\lambdaλ
    τtarget\tau_{\text{target}}τtarget​
    def rebalance():
        A = current_AUM()
        sigma_w = stdev(redemptions, window=W)
        L = z_p * sigma_w * sqrt(H)
        B_s = max(L + kappa *
    
    Borrower
    FalconX
    Borrower
    Bastion Trading
    Borrower
    Adaptive Frontier
    Borrower
    RockawayX
    Borrower
    Heka Elysium Alpha Bitcoin

    Curator

    Pareto

    Vertical

    Basis Trading (delta neutral)

    Fasanara Digital

    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

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

    • Connect a supported wallet

    List all transactions

    get
    Query parameters
    typestringOptional
    statusstringOptional
    walletAddressstringOptional
    vaultIdstringOptional
    chainIdstringOptional
    Responses
    200

    A list of transactions

    application/json

    List all vault types

    get
    Responses
    200

    A list of vault types

    application/json
    get
    /vault-types

    Get vault type by ID

    get
    Path parameters
    typeIdstringRequired
    Responses
    200

    A single vault type

    application/json
    get
    /vault-types/{typeId}

    List all campaigns

    get
    Responses
    200

    A list of campaigns

    application/json
    get
    /campaigns

    Get campaign by ID

    get
    Path parameters
    campaignIdstringRequired
    Responses
    200

    Campaign details

    application/json
    get
    /campaigns/{campaignId}

    List all vaults

    get
    Responses
    200

    A list of vaults

    application/json

    Get vault by ID

    get
    Path parameters
    vaultIdstringRequired
    Responses
    200

    Single vault object

    application/json
    get
    /vaults/{vaultId}

    Aggregated vault performance list

    get
    Responses
    200

    Vaults performance metrics

    application/json
    get
    /vaults/performances

    Get integrations related to a vault

    get
    Path parameters
    vaultIdstringRequired
    Responses
    200

    Integration data

    application/json
    get
    /vaults/{vaultId}/integrations

    List all tokens

    get
    Responses
    200

    A list of tokens

    application/json
    get
    /tokens

    Get token by ID

    get
    Path parameters
    tokenIdstringRequired
    Responses
    200

    Token details

    application/json
    get
    /tokens/{tokenId}

    List all vault performance entries

    get
    Responses
    200

    Vault performance data

    application/json
    get
    /vault-performances

    Get vault performance by ID

    get
    Path parameters
    vaultPerformanceIdstringRequired
    Responses
    200

    Vault performance entry

    application/json
    get
    /vault-performances/{vaultPerformanceId}

    List all operators

    get
    Responses
    200

    A list of operators

    application/json
    get
    /operators

    Get operator by ID

    get
    Path parameters
    operatorIdstringRequired
    Responses
    200

    Operator details

    application/json
    get
    /operators/{operatorId}
    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)
    ws∗=BsUSDSAw_s^{*}=\dfrac{B_{\text{sUSDS}}}{A}ws∗​=ABsUSDS​​
    c7c_7c7​
    wi,max⁡w_{i, \max}wi,max​
    ≥3\geq 3≥3
    get
    /transactions
    200

    A list of transactions

    200

    A list of vault types

    200

    A single vault type

    200

    A list of tokens

    200

    Token details

    200

    A list of operators

    200

    Operator details

    200

    A list of campaigns

    200

    Campaign details

    get
    /vaults
    200

    A list of vaults

    200

    Single vault object

    200

    Vaults performance metrics

    200

    Integration data

    200

    Vault performance data

    200

    Vault performance entry

    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-12-10T01:42:54.082Z",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "data": [
        {
          "_id": "text",
          "code": "text",
          "name": {
            "en": "text"
          },
          "description": {
            "en": "text"
          },
          "createdAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "_id": "text",
      "code": "text",
      "name": {
        "en": "text"
      },
      "description": {
        "en": "text"
      },
      "createdAt": "2025-12-10T01:42:54.082Z",
      "createdBy": "text",
      "updatedAt": "2025-12-10T01:42:54.082Z",
      "updatedBy": "text"
    }
    GET /v1/vault-types HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/vault-types/{typeId} 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-12-10T01:42:54.082Z",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "_id": "text",
      "name": "text",
      "symbol": "text",
      "decimals": 1,
      "address": "text",
      "chainId": "text",
      "logoURI": "text",
      "underlying": true,
      "createdAt": "2025-12-10T01:42:54.082Z",
      "updatedAt": "2025-12-10T01:42:54.082Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
    GET /v1/tokens HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/tokens/{tokenId} HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    {
      "data": [
        {
          "_id": "text",
          "name": "text",
          "description": "text",
          "image": "text",
          "vaults": [
            "text"
          ],
          "createdAt": "2025-12-10T01:42:54.082Z",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "_id": "text",
      "name": "text",
      "description": "text",
      "image": "text",
      "vaults": [
        "text"
      ],
      "createdAt": "2025-12-10T01:42:54.082Z",
      "updatedAt": "2025-12-10T01:42:54.082Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
    GET /v1/operators HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/operators/{operatorId} HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    {
      "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-12-10T01:42:54.082Z",
          "endDate": "2025-12-10T01:42:54.082Z",
          "link": "text",
          "galxeId": 1,
          "createdAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "_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-12-10T01:42:54.082Z",
      "endDate": "2025-12-10T01:42:54.082Z",
      "link": "text",
      "galxeId": 1,
      "createdAt": "2025-12-10T01:42:54.082Z",
      "createdBy": "text",
      "updatedAt": "2025-12-10T01:42:54.082Z",
      "updatedBy": "text"
    }
    GET /v1/campaigns/{campaignId} HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/campaigns HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    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-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "_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-12-10T01:42:54.082Z",
      "createdBy": "text",
      "updatedAt": "2025-12-10T01:42:54.082Z",
      "updatedBy": "text"
    }
    {
      "data": [
        {}
      ],
      "totalCount": 1
    }
    {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    }
    GET /v1/vaults/{vaultId} HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/vaults/performances HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/vaults/{vaultId}/integrations HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    {
      "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-12-10T01:42:54.082Z",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "_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-12-10T01:42:54.082Z",
      "updatedAt": "2025-12-10T01:42:54.082Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
    GET /v1/vault-performances HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/vault-performances/{vaultPerformanceId} HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    

    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

    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

    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

    Ethereum

    Asset

    USDC

    Cycle length

    One month

    Buffer length

    6 hours

    Redemptions

    Monthly, 31-day notice

    Early exit

    Enabled ()

    Performance fee

    10%

    Vault page

    Addresses

    Ethereum

    Asset

    USDC

    Cycle length

    One week

    Buffer length

    6 hours

    Redemptions

    Weekly, 7-day notice

    Early exit

    Enabled ()

    Performance fee

    10%

    Vault page

    Addresses

    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

    Link

    Addresses

    Link

    Curator

    M11 Credit

    Vertical

    Prime brokerage

    IRM

    Fixed rate

    Curator

    Pareto

    Vertical

    Market making

    IRM

    Fixed rate

    Curator

    Pareto

    Vertical

    HFT Trading

    IRM

    Fixed rate

    Curator

    Pareto

    Vertical

    Private Credit & DeFi Liquidity

    IRM

    Fixed rate

    Curator

    Pareto

    Vertical

    Cross-market Arbitrage

    IRM

    Fixed rate

    FalconX
    Bastion Trading
    Adaptive Frontier
    RockawayX
    Abraxas Capital Management

    Chain

    Chain

    Chain

    Chain

    Chain

    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.

    app.pareto.credit

    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: JSON

    Ethereum

    Fasanara Digital

    Description
    Address

    Bastion Trading

    Description
    Address

    Adaptive Frontier

    Description
    Address

    FalconX

    Description
    Address

    RockawayX

    Description
    Address

    Abraxas Capital Management

    Description
    Address

    Optimism

    FalconX

    Description
    Address

    Arbitrum

    Bastion Trading

    Description
    Address

    Polygon

    Bastion Trading

    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.

    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

    List all vault blocks

    get
    Responses
    200

    A list of vault blocks

    application/json

    Get vault block by ID

    get
    Path parameters
    vaultBlockIdstringRequired
    Responses
    200

    Vault block details

    application/json
    get
    /vault-blocks/{vaultBlockId}

    List the latest block snapshot per vault

    get
    Responses
    200

    Latest vault state per block

    application/json
    get
    /vault-latest-blocks

    Token USDC

    0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

    Contract

    0xf6223C567F21E33e859ED7A045773526E9E3c2D5

    Strategy

    0xC35D078092872Ec1f2ae82bcd6f0b6b89F0850de

    LP token

    0x45054c6753b4Bce40C5d54418DabC20b070F85bE

    Queue

    0x0b4F695B05902efc14344d19ED1d0B0E061C8A3E

    Token USDC

    0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

    Contract

    0x4462eD748B8F7985A4aC6b538Dfc105Fce2dD165

    Strategy

    0x06975bB418EFFB0029fe278A6fA15B92bb97496F

    LP token

    0xC49b4ECc14aa31Ef0AD077EdcF53faB4201b724c

    Token USDC

    0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

    Contract

    0x14B8E918848349D1e71e806a52c13D4e0d3246E0

    Strategy

    0xa30bE796FB2BAbF9228359E86A041c14e29f86Fc

    LP token

    0xae7913c672c7F1f76C2a1a0Ac4de97d082681234

    Queue

    0x5eCF8bF9eae51c2FF47FAc8808252FaCd8e36797

    Token USDC

    0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

    Contract

    0x433D5B175148dA32Ffe1e1A37a939E1b7e79be4d

    Strategy

    0x17E9Ab2992dfecBe779a06A92a6cDB9fE6aEeEf3

    LP token

    0xC26A6Fa2C37b38E549a4a1807543801Db684f99C

    Queue

    0x5cC24f44cCAa80DD2c079156753fc1e908F495DC

    Token USDC

    0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

    Contract

    0x9cF358aff79DeA96070A85F00c0AC79569970Ec3

    Strategy

    0x3Fc0265E92EeafED0cCd9F8621764Ce0981882cE

    LP token

    0xEC6a70F62a83418c7fb238182eD2865F80491a8B

    Queue

    0xBC6cffAFC8F98d7DF780cE05fA55e14781C1C14D

    Token USDC

    0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

    Contract

    0x6dbDEeF7a188bEaFFC2c57006e5D8edAf0C0e9e6

    Strategy

    0xE7E13F902Ea13e6EaAa4ed9A2DE5898436D12cbF

    LP token

    0x6dbDEeF7a188bEaFFC2c57006e5D8edAf0C0e9e6

    Queue

    0xeBa43518e4fddA8D82Ad711DA3b27717779DBdF7

    Token USDC

    0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85

    Contract

    0xD2c0D848aA5AD1a4C12bE89e713E70B73211989B

    Strategy

    0x2BCf124aa4f7F32f0fe54f498d924B934C942B31

    LP token

    0x24e16F9Fad32891f8bA69cE8fEdd273A2649331A

    Queue

    0x463465c334742D72907CA5fB97db44688B4EC3dC

    Token USDT

    0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9

    Contract

    0x3919396Cd445b03E6Bb62995A7a4CB2AC544245D

    Strategy

    0x5b11507F8A91005aD1591F54ef64133AabA6d06E

    LP token

    0x97F476F664A95106931f78113489e0361Cf1c9Fa

    Queue

    0x133F1C751f25C2AAf0E83f0609A67074915144A4

    Token USDT

    0xc2132d05d31c914a87c6611c10748aeb04b58e8f

    Contract

    0xF9E2AE779a7d25cDe46FccC41a27B8A4381d4e52

    Strategy

    0x4Ddb301403Ee3C4B4099ED128b34c36d86f6df35

    LP token

    0xaE65d6C295E4a28519182a632FB25b7C1966AED7

    Queue

    0xeAB324e9450d1EfFa087ccE8eff6C1FB476d60Ff

    Δ≥1\Delta \geq 1Δ≥1
    Δ≥1\Delta \geq 1Δ≥1
    Δ≥1\Delta \geq 1Δ≥1
    Δ≥1\Delta \geq 1Δ≥1
    Δ≥1\Delta \geq 1Δ≥1
    Link
    Link
    Link
    Link
    Link
    Link
    Link
    Link
    Link
    Link
    manager.pareto.credit
    vault contracts
    Etherscan
    Blockscout
    Pareto’s protocols are secured by the
    , 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
    ) before any assets are compromised.

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

    Audits
    Hypernative Platform
    Addresses
    get
    /vault-blocks
    200

    A list of vault blocks

    200

    Vault block details

    200

    Latest vault state per block

    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-12-10T01:42:54.082Z",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    {
      "_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-12-10T01:42:54.082Z",
      "updatedAt": "2025-12-10T01:42:54.082Z",
      "createdBy": "text",
      "updatedBy": "text"
    }
    {
      "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-12-10T01:42:54.082Z",
          "updatedAt": "2025-12-10T01:42:54.082Z",
          "createdBy": "text",
          "updatedBy": "text"
        }
      ],
      "totalCount": 1
    }
    GET /v1/vault-blocks/{vaultBlockId} HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    
    GET /v1/vault-latest-blocks HTTP/1.1
    Host: api.pareto.credit
    Accept: */*
    

    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 Web3.js documentation 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

    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.

    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

    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

    Managing requests

    There are 3 types of request:

    • DEPOSIT: available during the RUNNING state of the vault cycle

    • WITHDRAW: available during the RUNNING state of the vault cycle. This request can be "standard" or "instant" depending on the next cycle APR.

    • REDEEM: available during the

    All requests must be claimed by users after they have been processed:

    • DEPOSIT: this request can be claimed starting from the next WAITING period

    • WITHDRAW:

      • if standard: the request can be claimed at the end of the next cycle, during the WAITING period

    All vault requests are tracked in 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.).

    Requests are retrieved from the latest vault block:

    Deposit requests

    Handled via the queue contract vault.cdoEpoch.depositQueue

    • It's possible to claim the request if status === 'CLAIMED'

    • It's possible to cancel the request if status === 'PENDING'

    Withdraw requests

    Handled via the queue contract vault.cdoEpoch.withdrawQueue

    • For both standard and instant requests, it's possible to claim the request if status === 'CLAIMED'

    • It's possible to cancel the request if status === 'PENDING'

    Redeem requests

    Handled via the main vault contract vault.cdoEpoch

    • It's possible to claim the request if status === 'CLAIMED':

    • If request.isInstant === true it's possible to use:

    Lifecycle summary

    Request type
    When
    Claimable From
    const contract = new web3.eth.Contract(abi, address);

    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 Token

    Retrieve token information with:

    GET /v1/tokens/{vault.tokenId}

    4

    Fetch latest Vault Block

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

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

    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.

    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

    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

    WAITING
    state of the vault cycle. This request can be "standard" or "instant" depending on the next cycle APR.
  • if instant: the request can be claimed during the RUNNING period of the next cycle, after the instant withdrawal delay (usually few days).

  • REDEEM:

    • if standard: the request can be claimed at the end of the next cycle, during the WAITING period

    • if instant: the request can be claimed during the RUNNING period of the next cycle, after the instant withdrawal delay (usually few days).

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

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

  • epochNumber : the epochNumber that must be passed to the requests methods

  • REDEEM (instant)

    WAITING

    RUNNING of next cycle (after instant withdrawal delay)

    DEPOSIT

    RUNNING

    Next WAITING period

    WITHDRAW (standard)

    RUNNING

    End of next cycle (WAITING)

    WITHDRAW (instant)

    RUNNING

    RUNNING of next cycle (after instant withdrawal delay)

    REDEEM (standard)

    WAITING

    API chapter
    Vault Entity
    Keyring Connect SDK

    End of next cycle (WAITING)

    interface VaultSignature {
      _id: string;
      entity: "ALL" | "LENDER" | "MANAGER";
    }
    GET /v1/signatures?_id=signatureId1,signatureId2
    const hash = await web3.eth.personal.sign(
      atob(walletMessage),
      walletAddress,
      ""
    );
    GET /v1/vaults/{vaultId}/position?walletAddress={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 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 });
    const cdoEpochContract = new web3.eth.Contract(
      vault.cdoEpoch.abi,
      vault.cdoEpoch.address
    );
    const isAllowed = await cdoEpochContract.methods
      .isWalletAllowed(walletAddress)
      .call();
    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 });
    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 });
    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 depositQueueContract.methods
      .claimDepositRequest(request.epochNumber)
      .send({ from: walletAddress });
    await depositQueueContract.methods
      .deleteRequest(request.epochNumber)
      .send({ from: walletAddress });
    await withdrawQueueContract.methods
      .claimWithdrawRequest(request.epochNumber)
      .send({ from: walletAddress });
    await withdrawQueueContract.methods
      .deleteWithdrawRequest(request.epochNumber)
      .send({ from: walletAddress });
    await cdoEpochContract.methods
      .claimWithdrawRequest()
      .send({ from: walletAddress });
    await cdoEpochContract.methods
      .claimInstantWithdrawRequest()
      .send({ from: walletAddress });
    const spender = vault.cdoEpoch.withdrawQueue.address;
    const allowance = await tokenContract.methods
      .allowance(walletAddress, spender)
      .call({ from: walletAddress });