Technical architecture

Connecting to Yumi Credit Line

  • The underwriting process is facilitated via dedicated API endpoints. Your system sends us users' banking, personal, and wallet address data. We use it to analyze the user's profile and make a credit limit decision based on it.

  • Required data includes one or more financial sources (bank, wallet, or card data), the user's legal name, and one or more points of contact.

  • For cards with the Mobile app, we are building a React Native SDK for modular integration.

After onboarding, an initial limit is dynamically updated based on wallet and macroeconomic data.

API

At the moment of Authorization, the issuer queries the Yumi API for a credit limit using an HTTP request:

a. Endpoint: Send a POST request to the permit endpoint.

POST https://yumi-app-prod.up.railway.app/underwriting/permit

b. Request Body

underwriteData object required

underwriteData.EVMwalletAddresses string[] required EVM wallet addresses of the user Example: [ "0x123...", "0x456..." ]

underwriteData.SOLwalletAddresses string[] required SOL wallet addresses of the user Example: [ "abc...", "def..." ]

underwriteData.walletBalance number required Bank account balance of the user Example: 1000

permitData object required

permitData.spender string required Executor of the permit Example: "0x789..."

permitData.value number required USDC amount the user wants to loan Example: 30

If the credit is approved, the endpoint returns a permit signature for the requested USDC value, enabling the issuer to withdraw funds from the Yumi vault.

c. Response

Success (Credit approved)
{
    "code": 1,
    "permit": {
        "signature": {
            "v": 1,
            "r": "0x...",
            "s": "0x..."
        },
        "owner": "0x...", // Yumi vault
        "spender": "0x456...",
        "value": "40000000", // 40 USDC in decimals
        "deadline": "1719000000"
    },
    "creditLimit": 250, // USDC
    "msg": "Credit approved",
    "timestamp": 1761166681347
}
Success (Credit denied)
{
    "code": 2,
    "permit": null,
    "creditLimit": 30, // USDC
    "msg": "Credit denied",
    "timestamp": 1761166681347
}
Exception (Parameter Error)
{
    "code": 3,
    "permit": null,
    "msg": "parameter error: {error}",
    "timestamp": 1691732593484
}
Exception (System Error)
{
    "code": 4,
    "permit": null,
    "msg": "system error",
    "timestamp": 1691732593484
}

Loan Authorization (Per-Transaction Decision)

The issuer queries the Yumi API for a decision (limit/approval); the API returns a response with the current credit limit/decision. The model is just-in-time underwriting: the user is underwritten for each purchase; the limit may change from transaction to transaction and after repayments.

Funding model at authorization: The issuer receives the server-side allowance signature to take funds from the Yumi vault without actually taking money from the vault to avoid extra transactions delay.

Debt Repayment

When the user is ready to repay the debt, he can send an ochain transaction directly to the dedicated wallet or provide a signature through our API endpoint. We will execute the transaction on our side. There is a grace period, meaning if the user repays before it ends, no interest is applied.

Last updated

Was this helpful?