# Welcome to Qiro

Qiro is an institutional private credit platform focused on bringing high-quality, short-duration credit opportunities onchain. Led by a team with deep experience across fintech lending, credit underwriting and digital assets, Qiro provides institutional stablecoin investors with access to professionally underwritten private credit through transparent onchain vaults.

Qiro combines institutional-grade underwriting, legal structuring and continuous risk monitoring with the transparency and operational efficiency of smart contracts. The platform connects stablecoin capital with established payment, fintech and financial-services companies seeking flexible working capital.

Through its onchain vault infrastructure, Qiro gives eligible investors streamlined access to diversified private credit opportunities with transparent reporting, active monitoring and institutional risk controls.

**Links**

Website: [qiro.fi](https://qiro.fi)

Twitter: [@Qiro\_Finance](https://x.com/Qiro_Finance)

Substack: [qiro.substack.com](https://qiro.substack.com)

Linkedin: [Qiro Finance](https://www.linkedin.com/company/qiro-finance/)

Defillama: [defillama.com/protocol/qiro-finance](https://defillama.com/protocol/qiro-finance)


# Qiro Credit Vaults

Institutional private credit yield for stablecoin holders, underwritten by Qiro and curated by a dedicated Risk Curator.

Qiro Credit Vaults originate private credit facilities for businesses with predictable receivables: cross-border payment processors financing settlement float, private credit funds, and fintech lenders. Every borrower is underwritten by Qiro, and every facility is structured through a bankruptcy-remote SPV that acts as the legal lender.

The result is a two-sided credit market. **Borrowers** raise capital against operating cashflows. **Depositors** hold a vault share that appreciates as those facilities repay, earning yield drawn from credit performance rather than token emissions or trading fees.

Qiro decides who can be funded. A vault's **Risk Curator** decides how much and when, choosing only among borrowers Qiro has already approved.

|                  |                                                                          |
| ---------------- | ------------------------------------------------------------------------ |
| **Investor**     | [Deposit, track your position, and exit](/vaults-stakeholders/investors) |
| **Borrower**     | [Raise a facility against your flows](/vaults-stakeholders/borrowers)    |
| **Risk Curator** | [Allocate vault capital](/vaults-stakeholders/risk-curator)              |

New here? [**How It Works**](/about-us/how-it-works) follows a single dollar from deposit to redemption.

Vaults are open to verified institutional and accredited investors only. See [Who Can Invest](/vaults-stakeholders/investors/who-can-invest), or [get in touch](/about-us/get-in-touch).


# How It Works

The full path your capital takes, from stablecoin deposit through underwritten credit facilities, back to redemption.

This page follows a single dollar through a Qiro vault: how it enters, where it goes, how it earns, and how it comes back. Each stage links to a deeper page.

### 1. Deposit

You deposit a stablecoin into the vault and receive **vault shares** in return. Deposits are synchronous: you call `deposit` and the shares are in your wallet in the same transaction.

Shares are a claim on a proportion of the vault, not on any specific loan. You are not picking deals; you are buying into a curated portfolio.

→ [Deposit](/vaults-stakeholders/investors/deposit)

### 2. Deploy

The vault's **Risk Curator** moves capital out of the vault and into a **Subaccount**.

The curator decides which approved borrower is funded, how much, and when capital is recalled. It does not decide who is approved: every borrower clears Qiro's credit process first.

A Subaccount is an isolated allocation unit. Its mandate is agreed with Qiro in advance — which facilities it may fund, how many, and in what proportions — and its accounting is kept separate from every other Subaccount.

Each Subaccount carries a hard cap on the cumulative capital it can draw from the vault.

→ [SubAccounts](/vaults-core-concepts/subaccounts)

### 3. Lend

For credit facilities, capital moves from the Subaccount into a **Deal SPV**, a bankruptcy-remote vehicle established for that borrower.

The SPV, not the curator, is the legal lender. The loan documentation, security package, and covenants sit at this layer.

→ [Capital Protection](/about-us/capital-protection)

### 4. Repay

Borrowers draw down, deploy the capital in their operations, and repay principal plus interest on schedule.

Repayments travel back the way they came — borrower to SPV, SPV to Subaccount, Subaccount to vault — where they land as idle stablecoins and raise the vault's assets.

→ [Yield Sources](/vaults-core-concepts/yield-sources)

### 5. Redeem

Redemption follows the ERC-7540 async pattern: **request → service → claim**.

**Request.** You submit a redemption request. Your shares are locked and you receive a request ID, placing you in a first-in-first-out queue.

**Service.** An operator services your request in queue order.

**Claim.** Once serviced, your assets are claimable and paid from the vault's cash balance to the receiver you specify.

Strict FIFO is deliberate. It prevents selective servicing, so no investor jumps the queue by size or relationship, and it makes exit order transparent and auditable.

Servicing runs against a soft target of **7 days**, set per vault. It is a commitment by the curator, not a timer enforced by the contracts, and actual speed follows the rate at which deployed capital is recycled.

→ [Redemptions](/vaults-stakeholders/investors/redemptions)

***

### Where to go next

| Section                                                    | What it covers                                         |
| ---------------------------------------------------------- | ------------------------------------------------------ |
| [NAV & Valuation](/vaults-core-concepts/nav-and-valuation) | What a share is worth, and who values deployed capital |
| [Fees](/vaults-core-concepts/fees)                         | What the vault charges, and how it is taken            |
| [Architecture Overview](/about-us/architecture-overview)   | The same system viewed as four structural layers       |
| [Investors](/vaults-stakeholders/investors)                | Depositing, redeeming, and tracking your position      |
| [Risk Curator](/vaults-stakeholders/risk-curator)          | The role, its powers, and who holds it                 |
| [Risks](/legal-disclosure/risks)                           | Credit, liquidity, smart contract, and regulatory risk |


# Architecture Overview

Qiro Credit Vaults are structured across four layers, from investor capital at the top to yield-generating borrowers at the bottom.

Qiro Credit Vaults are structured across four layers. Capital flows down through them on deployment and back up on repayment.

```mermaid
flowchart TD
    I(["Investors"])
    V["1 · Vault<br/>(pooled capital, share price)"]
    S["2 · Subaccounts<br/>(isolated, capped mandates)"]
    D["3 · Deal SPVs<br/>(bankruptcy-remote legal lender)"]
    Y["4 · Yield Sources<br/>(borrowers, liquid strategies)"]

    I -- deposit --> V
    V -- allocate --> S
    S -- fund --> D
    D -- draw --> Y

    Y -. repay .-> D
    D -. repay .-> S
    S -. recall .-> V
    V -. redeem .-> I

    classDef investor fill:#1E1B3A,stroke:#6B56F1,stroke-width:3px,color:#FFFFFF;
    classDef l1 fill:#6B56F1,stroke:#6B56F1,stroke-width:0px,color:#FFFFFF;
    classDef l2 fill:#5B45E0,stroke:#5B45E0,stroke-width:0px,color:#FFFFFF;
    classDef l3 fill:#4C33D9,stroke:#4C33D9,stroke-width:0px,color:#FFFFFF;
    classDef l4 fill:#3D28B8,stroke:#3D28B8,stroke-width:0px,color:#FFFFFF;

    class I investor;
    class V l1;
    class S l2;
    class D l3;
    class Y l4;

    linkStyle 0,1,2,3 stroke:#6B56F1,stroke-width:2px;
    linkStyle 4,5,6,7 stroke:#0D9488,stroke-width:2px;
```

For a narrative walkthrough of the same system, see [How It Works](/about-us/how-it-works).

### Layer 1: Vault

The entry point for investors. The Vault accepts stablecoin deposits, issues share tokens, and maintains the share price. It holds pooled capital until the Risk Curator deploys it into Subaccounts.

### Layer 2: Subaccounts

The allocation layer. Capital flows from the Vault into one of several Subaccounts, each deploying under a mandate agreed with Qiro in advance and each carrying a hard cap on the cumulative capital it can draw.

Capital in one Subaccount is held apart from every other, and the accounting for each is kept separate.

### Layer 3: Deal SPVs

The legal isolation layer. For credit facilities, capital moves from a Subaccount into a Deal SPV, a bankruptcy-remote vehicle established for that borrower. The SPV is the legal lender. Not all yield sources require one.

### Layer 4: Yield Sources

Where yield is generated.

**Private credit borrowers**: payment companies and fintech lenders that draw down facilities, deploy the capital in their operations, and repay principal plus interest on schedule.

**Liquid strategies**: a portion of vault capital may be allocated to liquid yield sources such as T-bills or lending protocols, to earn a baseline return on undeployed capital and maintain a liquidity buffer for redemptions.


# Capital Protection

The safeguards behind every Qiro facility: how borrowers are selected, and how each facility is documented and secured.

Capital in a Qiro vault is protected in two layers. **Selection** decides which borrowers ever receive capital. **Deal structure** governs how each facility is documented and secured.

## Selection

### Underwriting

No capital reaches a borrower who has not been through a full institutional credit process: financial analysis, business plan review, management interviews, proprietary credit scoring, an internal rating, and a Credit Assessment Memo documenting the decision and the basis for it. Over **$50M** has been underwritten to date.

Bright-line exclusions are applied before any analysis begins, covering operating history, licensing, geography, and credit type. A borrower who fails one is not underwritten. The gates are listed on [Borrowers](/vaults-stakeholders/borrowers), the full process on [Risk Curator](/vaults-stakeholders/risk-curator).

## Deal structure

### Collateral

Facilities are secured against real underlying assets: traceable in-transit settlement flows for payment financing, and the borrower's own portfolio of retail and SME receivables for institutional credit. Security cover runs from 1.0x to 1.5x, so pledged collateral meets or exceeds the outstanding balance.

### Bankruptcy-remote SPV structure

Lending is facilitated through Special Purpose Vehicles established for each borrower relationship. The SPV is the legal lender, isolating investor capital from the borrower's insolvency and from the curator's own operational risk.

### Covenants

Each facility carries covenants the borrower must meet while it is outstanding. Compliance is monitored for the life of the facility, and a breach gives the curator the right to trigger early repayment or enforcement before a default.

***

For what can go wrong across credit, liquidity, smart contract, and regulatory risk, see [Risks](/legal-disclosure/risks).


# Glossary

Definitions for the terms used throughout these docs.

### The vault

| Term                       | Definition                                                                                                                                                                                                          |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Qiro Credit Vault**      | A smart contract that pools stablecoin deposits from verified investors and deploys them into curated private credit facilities. Each vault has its own strategy, yield profile, liquidity terms, and Risk Curator. |
| **Vault shares**           | The token you receive when you deposit. Shares represent proportional ownership of the vault, not a claim on any specific loan. Your balance never changes; what each share is worth does.                          |
| **Share price**            | The value of one share. Deposits are priced at the optimistic valuation, redemptions at the conservative one.                                                                                                       |
| **NAV (Net Asset Value)**  | Everything the vault holds — idle stablecoins, principal deployed to borrowers, and yield earned but not yet returned — less accrued fees.                                                                          |
| **Optimistic valuation**   | The basis used to price deposits and report NAV. Counts idle cash, deployed principal, and yield accrued on that principal.                                                                                         |
| **Conservative valuation** | The basis used to price redemptions. Counts idle cash and deployed principal, excluding yield accrued but not yet received.                                                                                         |
| **Idle capital**           | Stablecoins sitting in the vault, not yet deployed. Redemption claims are paid from it.                                                                                                                             |

### Roles

| Term             | Definition                                                                                                                                                           |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Risk Curator** | The party that allocates vault capital: which approved borrower is funded, how much, and when capital is recalled. Qiro holds this role across the vaults at launch. |
| **Servicer**     | The operator that processes the redemption queue, converting pending requests into claimable assets.                                                                 |
| **Investor**     | A verified depositor. Selection is the curator's responsibility; underwriting is Qiro's.                                                                             |
| **Borrower**     | A company receiving capital from a facility. Qiro's three archetypes are payment processors, private credit funds, and fintech lenders / NBFIs.                      |

### Structure

| Term               | Definition                                                                                                                                                                                                                                                                |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Subaccount**     | An isolated allocation unit within a vault. It deploys under a mandate agreed with Qiro in advance — which facilities it may fund, how many, and in what proportions — and may hold several facilities at once. Capital in one Subaccount is held apart from every other. |
| **Deal SPV**       | A bankruptcy-remote vehicle established for a specific borrower relationship. The SPV, not the curator, is the legal lender.                                                                                                                                              |
| **Position limit** | A hard ceiling, enforced by the contracts, on the cumulative capital any single Subaccount can draw from the vault.                                                                                                                                                       |

### Deposits and redemptions

| Term                   | Definition                                                                                                                                                                                |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Deposit**            | Sending stablecoins to the vault and receiving shares in the same transaction. Deposits are synchronous.                                                                                  |
| **Redemption request** | A submitted intention to exit. Your shares are locked and you join the queue.                                                                                                             |
| **FIFO queue**         | First in, first out. Requests are serviced in order of submission, globally across all investors.                                                                                         |
| **Servicing**          | The step that converts a pending request into claimable assets: shares are burned and priced at the prevailing share price. A large request may be serviced across more than one round.   |
| **Claim**              | Collecting your assets after servicing. Paid from the vault's idle capital to the address you specify.                                                                                    |
| **Lock-up**            | A minimum holding period before a redemption request can be made. Lock-ups and redemption cadence are operational commitments made per vault, not timers enforced by the smart contracts. |

### Credit

| Term                             | Definition                                                                                                                                                                                                                                             |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Underwriting**                 | The credit process every borrower clears before any capital is committed: financial analysis, business plan review, management interviews, proprietary scoring, and an internal rating. Always performed by Qiro, regardless of who curates the vault. |
| **Hard gates**                   | Bright-line exclusions applied to every borrower before credit analysis begins, covering operating history, licensing, geography, and credit type. A borrower who fails one is not underwritten.                                                       |
| **Credit Assessment Memo (CAM)** | The document produced for each approved borrower, recording the credit decision and the basis for it.                                                                                                                                                  |
| **Security cover**               | The ratio of pledged collateral value to the outstanding balance of a facility. Qiro structures facilities at 1.0x to 1.5x.                                                                                                                            |
| **Receivables**                  | Amounts owed to a borrower by its own customers, pledged as collateral. For payment financing these are in-transit settlement flows; for institutional credit, a diversified pool of retail and SME receivables.                                       |
| **Covenants**                    | Conditions a borrower must continue to meet while a facility is outstanding. A breach gives the curator the right to trigger early repayment or enforcement.                                                                                           |
| **NBFI**                         | Non-Bank Financial Institution. A lender that extends credit without holding a banking licence.                                                                                                                                                        |

### Access

| Term                    | Definition                                                                                                                                                        |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **KYC / KYB**           | Know Your Customer and Know Your Business: the identity and entity verification every investor completes before depositing.                                       |
| **Accredited investor** | An investor meeting the wealth, income, or institutional thresholds set by their jurisdiction. Qiro vaults are limited to accredited and institutional investors. |
| **Investor whitelist**  | The on-chain record of verified addresses. Vault shares can only be held by, and transferred between, whitelisted addresses.                                      |

### Standards

| Term         | Definition                                                                                                           |
| ------------ | -------------------------------------------------------------------------------------------------------------------- |
| **ERC-4626** | The tokenized vault standard, covering deposits, share accounting, and total assets.                                 |
| **ERC-7540** | The asynchronous extension to ERC-4626, covering the request → service → claim redemption flow that Qiro vaults use. |


# Get in Touch

How to reach the Qiro team.

Qiro vaults are not self-serve. Access requires verification, and every facility begins with a conversation.

### Business enquiries

Investor onboarding, borrower origination, curation and partnerships, and press.

`Email us at admin@qiro.fi`

### Socials

[X](https://x.com/Qiro_Finance) · [LinkedIn](https://www.linkedin.com/company/qiro-finance/)


# Investors

Who invests in Qiro vaults, what they do, and what they rely on.

Investors are stablecoin holders who deposit into a Qiro vault to earn private credit yield. Access is limited to verified institutional and accredited investors.

**What they do:**

* Deposit stablecoins into a vault and receive vault shares
* Earn yield as deployed capital accrues interest from borrowers
* Submit redemption requests when they want to exit; receive stablecoins back after the FIFO queue is serviced

**What they rely on others for:**

* **Underwriting**: every borrower clears Qiro's credit process before capital is committed.
* **Allocation and monitoring**: the vault's [Risk Curator](/vaults-stakeholders/risk-curator) decides which approved borrowers are funded and tracks them after deployment.
* **Servicing**: the redemption queue is processed by an operator as deployed capital is recycled.

**What they need to qualify:**

Access requires KYC/KYB verification and accredited or institutional status. Minimums are set per vault.

* [Who Can Invest](/vaults-stakeholders/investors/who-can-invest): eligibility, minimums, and what verification means for your shares
* [Onboarding](/vaults-stakeholders/investors/onboarding): verification, documentation, and whitelisting, step by step
* [Monitoring Your Position](/vaults-stakeholders/investors/monitoring-your-position): what you can see, and how to verify it independently


# Who Can Invest

Eligibility, verification, and minimums for the Qiro Credit Vaults.

Qiro Credit Vaults are private credit products, and access is restricted.

### Who these vaults are for

Qiro vaults are built for institutional and accredited investors:

* Crypto-native funds and asset managers
* DAO treasuries
* Stablecoin issuers
* Family offices and sophisticated allocators

### Requirements

**KYC/KYB verification.** Every investor completes identity or entity verification before they can deposit. Verified investors are recorded onchain; vault shares can only be held by verified addresses.

**Accredited or institutional status.** Participation is limited to investors who qualify as accredited or institutional under the rules of their jurisdiction.

**Minimum investment.**

| Vault                                                           | Minimum  |
| --------------------------------------------------------------- | -------- |
| [Payment Financing](/core-vaults/payment-financing-vault)       | $250,000 |
| [Private Credit](/core-vaults/private-credit-vault)             | $500,000 |
| [Institutional Credit](/core-vaults/institutional-credit-vault) | $500,000 |

### Before you allocate

**This is not a liquid product.** Redemptions are asynchronous and there is no guaranteed timeline. Do not allocate capital you may need at short notice. See [Risks](/legal-disclosure/risks).

**Your shares will be transfer-restricted.** They can move only between verified addresses, including addresses you control yourself. A vault's permissioned status is fixed at deployment.

**Regulatory responsibility is yours.** Private credit investing is regulated in most jurisdictions, and each investor remains responsible for ensuring their participation complies with the law that applies to them.

***

Read [Risks](/legal-disclosure/risks) before depositing. To begin verification, see [Get in Touch](/about-us/get-in-touch).


# Onboarding

How verification works, and what happens between first contact and first deposit.

Qiro vaults are permissioned. An address cannot hold vault shares until it has been verified and recorded onchain.

Confirm you meet the [eligibility criteria](/vaults-stakeholders/investors/who-can-invest) before starting.

### 1. Contact

Reach out through [Get in Touch](/about-us/get-in-touch) with the vault you are interested in and your investing entity type. Qiro confirms eligibility, current vault capacity, and the applicable minimum.

### 2. Verification

You complete KYC or KYB depending on whether you invest personally or through an entity.

**Individuals** provide identity documentation, proof of address, and evidence of accredited status under the rules of their jurisdiction.

**Entities** provide constitutional documents, ownership and beneficial ownership detail, authorised signatory information, and identity documentation for principals.

Requirements vary by jurisdiction and entity type. The exact list is confirmed when you begin.

### 3. Documentation

Subscription and related documents are executed, recording the vault, the amount, and the terms attaching to it.

### 4. Whitelisting

Once verification and documentation are complete, your deposit address is added to the vault's investor whitelist onchain.

Until an address is whitelisted, deposits from it revert and shares cannot be transferred to it. Whitelisting is address-specific. If you intend to deposit from more than one address, or later change custody arrangements, each address needs to be verified.

### 5. Deposit

You transfer stablecoins to the vault and receive shares in the same transaction. From here, [Deposit](/vaults-stakeholders/investors/deposit) and [Redemptions](/vaults-stakeholders/investors/redemptions) cover the mechanics.

***

### What to know

**Whitelisting can be reversed.** An address can be removed from the whitelist, for example if compliance circumstances change. A removed holder keeps their shares and can still claim assets from a serviced redemption, but cannot transfer shares or submit a new redemption request until reinstated.

**Verification is per address, not per person.** Sending shares to an unverified wallet is not possible, including one you control.

**Onboarding takes time.** Verification and documentation vary with entity complexity and jurisdiction, so most investors start the process ahead of the point they intend to allocate.


# Deposit

How to deposit into a vault, and how your shares are priced.

Depositing is a single transaction. You send stablecoins to the vault and receive shares in the same call.

### Before you deposit

Your address must be on the vault's investor whitelist. Both the address sending the funds and the address receiving the shares are checked, so where you deposit on behalf of another entity, both need to be verified.

See [Onboarding](/vaults-stakeholders/investors/onboarding) for how verification works.

### Making the deposit

There are two entry points, depending on which side of the trade you want to fix.

```solidity
deposit(assets, receiver)   // you name the amount of stablecoin to send
mint(shares, receiver)      // you name the number of shares to receive
```

`deposit` sends a fixed amount of stablecoin and issues whatever shares that buys. `mint` issues a fixed number of shares and takes whatever stablecoin that costs. `receiver` is the address credited with the shares, which may be your own.

Both settle in the same transaction.

### How your shares are priced

Your shares are priced on the vault's **optimistic** valuation. Pricing this way means a deposit made while yield is accruing pays for that yield rather than diluting the investors who earned it.

Fees are settled immediately before pricing, so the share price you transact at is already net of them. See [NAV & Valuation](/vaults-core-concepts/nav-and-valuation).

### Availability

Deposits are open while the vault is unpaused and your address is verified. When either condition is not met, the vault reports a maximum deposit of zero and the transaction reverts rather than partially filling.

A deposit that would issue zero shares also reverts.

***

Next: [Redemptions](/vaults-stakeholders/investors/redemptions) for how to exit, and [Monitoring Your Position](/vaults-stakeholders/investors/monitoring-your-position) for what your shares are worth over time.


# Redemptions

How to exit a vault: request, servicing, and claiming.

Exiting a vault takes three steps: you **request**, a servicer **services** the queue, and you **claim**. The vault follows ERC-7540 for asynchronous redemptions.

Serviced assets wait for you to collect them; they do not arrive automatically.

### Step 1: Request

```solidity
requestRedeem(shares, controller, owner)
```

Your shares are transferred into the Redemption Manager, which holds them while the request is outstanding, and you receive a `requestId`.

`owner` is the address the shares come from. `controller` is the address entitled to manage and later claim the request, usually the same address, though they can differ for custodial or contract-held positions.

Three limits apply at this step:

* A minimum request size, set per vault, which keeps dust out of the queue.
* A cap on how many requests a single owner may have active at once.
* A cap on how many a single controller may have active at once.

The owner's address must be verified, and the vault must be unpaused.

### Step 2: Servicing

A servicer processes the queue in submission order. This is an operator action and requires nothing from you.

When your request is reached, its shares are burned and converted to assets at the **conservative** valuation prevailing at that moment. Your request then holds a claimable balance.

Requests can be filled across more than one round. Where that happens, your request holds a pending balance and a claimable balance at the same time, and the pending balance keeps its place at the front of the queue.

Servicing runs against a target of 7 days from request, set per vault. It is a commitment by the curator, not a timer enforced by the contracts, and follows the rate at which deployed capital returns to the vault.

### Step 3: Claim

```solidity
redeem(shares, receiver, controller)     // claim by share amount
withdraw(assets, receiver, controller)   // claim by asset amount
```

Either call moves your assets from the vault to the `receiver` address you name. You can claim as soon as a balance becomes claimable, including a partial fill.

Claiming stays available while the vault is paused, and to an address that has been removed from the whitelist.

### Cancelling

A request that has not been serviced can be cancelled, returning the shares held against it. Where a request has been partially serviced, cancelling returns the pending shares and pays out the claimable assets.

You name where each goes:

```solidity
cancelRequest(requestId, sharesReceiver, assetsReceiver)
```

The vault owner can also cancel a request administratively, for example where an investor's compliance status has changed.

### Delegating to an operator

You can authorise another address to act for you:

```solidity
setOperator(operator, approved)
```

An approved operator can request, claim, and cancel on your behalf as controller, which is useful for custodial arrangements and contract-held positions.

You can also pre-set where shares and assets should go, so proceeds route correctly without naming them on each call:

```solidity
setSharesAndAssetsReceiver(controller, sharesReceiver, assetsReceiver)
```

***

See [Monitoring Your Position](/vaults-stakeholders/investors/monitoring-your-position) for tracking a live request.


# Monitoring Your Position

What you can see about your position, and where to find it.

Your position is a share balance and a share price. The balance is what you hold; the price is what each share is worth, and it is where yield appears.

### What your position consists of

**Your share balance.** It changes when you deposit, redeem, or transfer. Requesting a redemption also moves shares out of your wallet and into the Redemption Manager, so the balance reflects that transfer from the moment you request rather than when the request is serviced. Until the request is serviced or cancelled, those shares are represented by the request.

**The share price.** What one share is worth in the underlying asset. Deposit 500,000 USDC at a share price of 1.00 and you hold 500,000 shares, worth 525,000 USDC once the price reaches 1.05. The price moves with the performance of the vault's facilities.

The vault publishes two share prices, because each side of the trade prices differently: deposits at the optimistic valuation, redemptions at the conservative one. Both are reported to 18 decimals, whatever the underlying stablecoin's own decimals are. See [NAV & Valuation](/vaults-core-concepts/nav-and-valuation).

**Your redemption requests.** Each request carries a pending balance, a claimable balance, or both at once. Tracking them is covered below.

### What the vault publishes

Shown on the vault's page in the app, and readable directly from the vault contract.

| What                   | Getter                     | Meaning                                                                                                                                                                         |
| ---------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Total assets           | `totalAssets()`            | The vault's optimistic NAV: idle cash plus the value of deployed capital including interest earned so far, less fees and less assets already set aside for serviced redemptions |
| Share price (deposits) | `sharePriceOptimistic()`   | What one share is worth on the optimistic valuation. What deposits and mints price at                                                                                           |
| Share price (exits)    | `sharePriceConservative()` | What one share is worth on the conservative valuation. What the queue converts shares at when your request is serviced                                                          |
| Allocated assets       | `allocatedAssets()`        | The conservative value of capital deployed to credit positions. It follows the curator's mark and updates as the facilities perform                                             |
| Idle cash              | `cashBalance()`            | Stablecoins the vault is free to deploy. It excludes assets already set aside for serviced redemption claims, and fees accrued but uncollected                                  |

### Tracking a redemption

When you submit a request you receive a **request ID**. The Redemption Manager lists every ID you hold:

```solidity
getRequestIdsByController(controller)
```

Two counters give your place in the queue: `requestCounter()`, the total number of requests ever created, and `lastServicedRequestId()`, the ID of the last one serviced. The gap between your ID and the last serviced one is how many sit ahead of you, as an upper bound, since cancelled requests keep their IDs but no longer need servicing.

Each request carries three figures:

| Figure                                    | Getter                                             |
| ----------------------------------------- | -------------------------------------------------- |
| Shares still pending                      | `pendingRedeemRequest(requestId, controller)`      |
| Shares already serviced                   | `claimableRedeemRequest(requestId, controller)`    |
| Assets those serviced shares converted to | `claimableAssetsForRequest(requestId, controller)` |

Pending and serviced can both be non-zero at once, because a large request may be filled across more than one round.

All three take a request ID. Passing `0` instead of an ID returns your total across every request rather than the figure for one. The first two are readable on the vault, which forwards them; all three are readable on the Redemption Manager directly, whose address the vault publishes as `REDEMPTION_MANAGER`.

**Your claimable assets** is what you can withdraw today. `maxWithdraw(controller)` and `maxRedeem(controller)` report the same ceiling in assets and in shares. Neither is affected by a pause: once a request has been serviced, the assets stay claimable.

Where you hold several requests at once, a claim draws on your oldest claimable request first and works forward, so a partial claim empties the earliest before it touches any later one.

***

See [NAV & Valuation](/vaults-core-concepts/nav-and-valuation) for how the share price is determined, and [Redemptions](/vaults-stakeholders/investors/redemptions) for the exit process itself.


# Investor FAQs


# Borrowers

Who Qiro lends to, the gates every borrower clears, and what they get.

Borrowers are the capital recipients, the companies whose credit activity generates the yield investors earn.

Qiro targets three borrower archetypes across its vaults:

**Payment processors / PayFi companies:** Cross-border payment processors and remittance platforms that need short-term working capital to bridge settlement timing gaps. Drawdowns are small (days), repayments are predictable, and receivables are specific and traceable. These are the highest-frequency, shortest-duration facilities in the suite.

**Private credit funds:** Established private credit, venture debt, and specialty finance funds that extend loans to fintech, payment, and lending platforms globally. The vault invests at the fund level, gaining diversified exposure to each fund's underlying portfolio.

**Fintech lenders / NBFIs:** Non-bank financial institutions with seasoned loan books across supply chain finance, invoice discounting, inventory financing, and SME lending. Each facility is backed by a diversified pool of the borrower's own receivables.

**Hard gates applied to all borrowers:**

* Minimum 12+ months of performance data required before underwriting begins
* Full KYB completed
* Licensed or partner-licensed preferred
* Developed markets only (USA, Singapore, UK/Europe), no emerging market exposure
* No unsecured consumer credit as a primary focus

**What borrowers get from Qiro:**

* Access to global stablecoin capital
* Non-dilutive debt financing
* A single counterparty for the full debt stack

***

If your business fits the profile above:

* [The Borrowing Process](/vaults-stakeholders/borrowers/borrowing-process): how a facility goes from first conversation to funded and repaid
* [What to Prepare](/vaults-stakeholders/borrowers/what-to-prepare): the diligence materials Qiro will ask for

Then [Get in Touch](/about-us/get-in-touch) to start a conversation.


# The Borrowing Process

How a facility goes from first conversation to funded and repaid.

Every Qiro facility follows the same path. Each stage completes before the next begins.

### 1. Screening

An initial conversation establishes whether the [hard gates](/vaults-stakeholders/borrowers) are met. These are bright lines, checked before any analysis begins.

If the gates are met, Qiro confirms the diligence list and indicative facility shape.

### 2. Diligence and underwriting

Qiro underwrites every borrower directly. See [What to Prepare](/vaults-stakeholders/borrowers/what-to-prepare) for the materials requested at this stage.

The process covers financial analysis, business plan review, and management interviews, followed by credit scoring, risk metrics, and an internal rating produced through Qiro's underwriting platform. It concludes in a **Credit Assessment Memo** documenting the credit decision and its basis.

The outcome is binary: approved onto the borrower set, or declined. Approval establishes that you *can* be funded, not that you have been.

### 3. Structuring

An approved borrower is structured into a facility: loan type, tenor, rate, security package, and covenants. A bankruptcy-remote SPV is established as the legal lender for the relationship, and legal documentation is completed before any capital moves.

Security is taken against identified collateral, typically your own receivables, at security cover between 1.0x and 1.5x.

### 4. Allocation

The vault's [Risk Curator](/vaults-stakeholders/risk-curator) decides which approved borrowers are funded from which vault, and in what size. Approval and allocation are separate decisions made by separate parties: Qiro determines who is eligible, the curator determines who is funded.

Allocation depends on vault capacity, concentration limits, and how your facility fits the existing portfolio.

### 5. Drawdown

Capital reaches you through your Deal SPV, under the facility documentation.

Drawdown mechanics vary by facility type. Revolving structures, payment financing in particular, draw and repay on short cycles, so capital recycles continuously rather than sitting outstanding for a full term.

### 6. Repayment and monitoring

You repay principal and interest on the schedule in your documentation.

Monitoring runs for the life of the facility: borrower performance, covenant compliance, and receivables quality. A covenant breach gives Qiro the right to trigger early repayment or enforcement before deterioration becomes a default.

Facilities that perform are typically renewed or upsized; the process above is heaviest the first time.

***

To begin, see [Get in Touch](/about-us/get-in-touch).


# What to Prepare

The materials Qiro asks for during diligence, and what makes a file move quickly.

Diligence moves at the speed of the slowest missing document.

The exact list is confirmed during screening and varies by borrower type. This is what to expect.

### Entity and compliance

* Certificate of incorporation and constitutional documents
* Ownership and group structure, including ultimate beneficial ownership
* KYB materials for the entity and its principals
* Licences held, or evidence of a licensed partner arrangement
* Jurisdiction of operation and of incorporation

### Financials

* Audited financial statements where available, management accounts otherwise
* At least **12 months** of operating history, which is a hard gate
* Current balance sheet, including existing debt and its ranking
* Cash flow detail sufficient to assess debt service capacity

### Portfolio and performance data

The part that most often determines the outcome.

* Loan-level or transaction-level data covering at least 12 months
* Vintage performance: delinquency, default, and recovery by cohort
* Concentration: by obligor, sector, and geography
* For lenders: underwriting criteria and how they have changed over time
* For payment companies: settlement flow volumes, timing, and counterparties

### The facility itself

* Amount sought, intended use of proceeds, and preferred tenor
* Collateral available and any existing encumbrances over it
* Existing lenders and their security positions
* Repayment source and how it is generated

### Business context

* Business plan and current financial model
* Management team backgrounds
* Availability of management for interview

***

### What makes a file slow

* **Gaps in the performance history.** The twelve months needs to be continuous.
* **Unreconciled data.** Portfolio data that does not tie to the financials raises questions that take longer to resolve than to avoid.
* **Undisclosed encumbrances** discovered late in structuring, after terms have been discussed.
* **Unclear ownership**, which stalls KYB regardless of how strong the credit is.

None of these are disqualifying on their own. All of them cost weeks.

***

Read [The Borrowing Process](/vaults-stakeholders/borrowers/borrowing-process) for what happens at each stage, then [Get in Touch](/about-us/get-in-touch).


# Borrrower FAQS


# Risk Curator

The role responsible for allocating vault capital: what it decides, and what it cannot.

The Risk Curator decides how a vault's capital is deployed: which approved borrower is funded, how much, and when capital is recalled. The curator also structures the facilities it opens and monitors them for the life of the loan.

Qiro acts as Risk Curator across the vaults at launch, and the architecture allows other qualified enterprise entities to hold the role on future vaults.

### Underwriting sits outside the role

**Underwriting is always performed by Qiro, whoever curates the vault.**

A curator selects from the set of borrowers Qiro has approved. It does not decide who enters that set. The process that produces that set is described in [The Borrowing Process](/vaults-stakeholders/borrowers/borrowing-process).

### What the curator does

*Allocation*

* Decides which approved borrowers are funded from which vault
* Sets position sizes and manages concentration across the portfolio
* Determines when capital is deployed and when it is recalled

*Structuring*

* Structures each facility: loan type, tenor, rate, security package, covenants
* Establishes the bankruptcy-remote SPV for each deal
* Ensures legal documentation is in place before capital moves

*Monitoring and valuation*

* Tracks borrower performance after deployment
* Monitors covenant compliance and receivables quality
* Triggers early repayment or enforcement if conditions are breached
* Maintains the reported value of deployed positions, which is what drives the vault's share price

### What the curator cannot do

These limits are enforced by the contracts rather than by policy.

* **It cannot choose where capital may go.** Capital can only be deployed to destinations whitelisted in advance, and whitelisting a new one is a separate action the curator does not control. The curator decides how much and when, within an approved set.
* **It cannot exceed a position's cap.** Every position carries a hard ceiling on the capital it can draw. A deployment beyond it reverts, and raising the ceiling is not the curator's to make.
* **It cannot mark a position freely.** Revaluation is rate-limited by a time-weighted deviation budget. See [NAV & Valuation](/vaults-core-concepts/nav-and-valuation). A change larger than the budget allows reverts.
* **It cannot touch fees.** Fee rates are capped by the contracts and set by a separate authority; collection is a separate role again.
* **It cannot move assets to itself.** Capital moves between the vault, approved destinations, and borrowers. There is no path from a curated position to the curator.

### Accountability

* **Fee alignment.** The performance fee is charged only on gains above the vault's high-water mark, so the curator earns on it only when investors do. See [Fees](/vaults-core-concepts/fees).
* **Onchain transparency.** Capital deployed, capital returned, valuations posted, and fees charged are all recorded onchain.

***

See [How It Works](/about-us/how-it-works) for where curation sits in the capital path, and [Capital Protection](/about-us/capital-protection) for the full set of protocol-level bounds.


# Use-cases

Liquidity That Keeps Payments Moving

Qiro provides revolving credit to payment companies, FX providers, OTC desks and card businesses for approved prefunding and settlement requirements.

Draw stablecoins, complete your payment flow, and repay when the corresponding settlement or treasury liquidity becomes available.

## Find Your Use Case

| Use Case                                                                                                                    | What Qiro Enables                                                                  | Repayment Source                                        |
| --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------- |
| [OTC Desk Settlement Financing](/use-cases/use-cases/otc-desk-settlement-financing)                                         | Deliver stablecoins before the purchaser's fiat wire arrives.                      | Settled client fiat, converted into the repayment asset |
| [Institutional Payout Financing](/use-cases/use-cases/institutional-payout-financing)                                       | Execute payouts before an institutional client pays you.                           | Exchange-house or PSP settlement                        |
| [Payment Buffer and Destination Account Prefunding](/use-cases/use-cases/payment-buffer-and-destination-account-prefunding) | Maintain payout capacity while collected funds move between accounts and partners. | Released payment buffers or eligible treasury liquidity |
| [FX Settlement Financing](/use-cases/use-cases/fx-settlement-financing)                                                     | Deliver destination currency before the client's source currency arrives.          | Client settlement                                       |
| [Liquidity Provider Settlement Financing](/use-cases/use-cases/liquidity-provider-settlement-financing)                     | Deliver stablecoins while your LP waits to receive your fiat payment.              | Stablecoins delivered by the LP                         |
| [Off-Ramp Prefunding](/use-cases/use-cases/off-ramp-prefunding)                                                             | Complete local fiat payouts before incoming stablecoins become available.          | Incoming customer stablecoins                           |
| [Card-Programme Settlement](/use-cases/use-cases/card-programme-settlement)                                                 | Meet card settlement obligations before programme funding becomes available.       | Programme funding or eligible receivables               |

Weekends, holidays and peak payment volumes can create or extend the funding gaps within these flows.

## Reading the Funds Flows

Each diagram illustrates an approved funding structure and begins after a Qiro drawdown reaches **`FUNDED`**. Solid arrows show funds or asset movements; dotted arrows show instructions or confirmations. Notes identify settlement delays and operating conditions.

Qiro provides stablecoin credit. The borrower's existing partners handle conversion, banking and payouts. Where a diagram uses a treasury label, it includes the relevant company accounts and approved wallets.

Principal repayments use the required facility asset. The borrower also provides accrued interest and applicable charges; a matching incoming principal amount does not by itself cover those additional obligations.

Availability, permitted use, repayment timing and security arrangements are agreed during underwriting. Each flow must identify funds available to the borrower for repayment under the approved structure.

[Understand the Shared Funding Lifecycle](/use-cases/accessing-liquidity)


# OTC desk settlement financing

**Deliver stablecoins while your client's bank transfer is in transit.**

## When You Need It

Your client has purchased stablecoins and initiated a fiat wire, but the transfer will take several hours or overnight to arrive.

Qiro finances the delivery gap. Once the fiat settles, you convert it into the repayment asset and settle the drawdown.

## Funds Flow

```mermaid
sequenceDiagram
    participant C as OTC Client
    participant B as Client's Bank
    participant O as OTC Desk Treasury
    participant Q as Qiro Facility
    participant L as Conversion Partner

    C-->>B: Initiate fiat wire
    Note over B,O: Fiat is in transit
    Q->>O: Fund approved stablecoin drawdown
    O->>C: Deliver purchased stablecoins
    B->>O: Client fiat settles
    O->>L: Send fiat for conversion
    L->>O: Return repayment stablecoin
    O->>Q: Repay principal and interest
```

## How Qiro Fits

| Item             | Description                                                                                      |
| ---------------- | ------------------------------------------------------------------------------------------------ |
| Borrower         | The approved OTC desk entity                                                                     |
| What Qiro Funds  | Stablecoin delivery before incoming client fiat becomes available                                |
| Repayment Source | Settled client purchase funds, converted into the repayment asset                                |
| Business Value   | Complete eligible client trades sooner while reducing treasury capital tied up in incoming wires |

Incoming payment information supports transaction assessment. A wire confirmation alone does not replace borrower underwriting or the agreed facility requirements.

[Accessing Liquidity](file:///2125505/accessing-liquidity.md) · [All Use Cases](file:///2125505/README.md)


# Institutional payout financing

**Execute payouts now and collect from your institutional client later.**

## When You Need It

An exchange house or PSP instructs your company to complete payments. You execute those payouts, creating a receivable that the institutional client settles on its agreed schedule.

Qiro finances the period between payout execution and collection.

## Funds Flow

```mermaid
sequenceDiagram
    participant I as Exchange House or PSP
    participant B as Payment Company Treasury
    participant Q as Qiro Facility
    participant P as Payout Partner
    participant R as Beneficiary

    I-->>B: Send payout instructions
    Q->>B: Fund approved stablecoin drawdown
    B->>P: Fund payout batch in agreed asset
    P->>R: Deliver local fiat
    P-->>B: Confirm completed payouts
    Note over I,B: Completed payouts create the client receivable
    I->>B: Settle payment obligation
    B->>B: Convert proceeds through approved partner
    B->>Q: Repay in required stablecoin
```

The borrower funds the payout partner through its approved conversion and settlement arrangements. The diagram groups any required conversion into the payout-funding step.

## How Qiro Fits

| Item             | Description                                                                                                          |
| ---------------- | -------------------------------------------------------------------------------------------------------------------- |
| Borrower         | The approved payment company executing payouts                                                                       |
| What Qiro Funds  | Payout obligations before the institutional client settles                                                           |
| Repayment Source | Settlement from the approved exchange house or PSP                                                                   |
| Business Value   | Process more approved institutional payment volume without funding the entire collection gap from your balance sheet |

## What Makes This Flow Distinct

The incoming client payment may only be initiated after payout execution. A wire already in transit is not assumed. The approved structure must support the actual instruction, payout, receivable and collection lifecycle.

[Accessing Liquidity](file:///2125505/accessing-liquidity.md) · [All Use Cases](file:///2125505/README.md)


# Payment buffer and destination account prefunding

**Process prefunded customer payments without waiting for every treasury transfer to arrive.**

## When You Need It

Your customer has already paid. However, those funds are not yet available at the partner or account that executes the payout.

Qiro finances the temporary payment buffer. The buffer can support repeated payments as customer funds replenish it throughout the day.

## Funds Flow

```mermaid
sequenceDiagram
    participant C as Customer
    participant B as Payment Company Treasury
    participant Q as Qiro Facility
    participant P as Payout Partner Account
    participant R as Beneficiary

    C->>B: Customer funds are received
    Q->>B: Fund approved stablecoin drawdown
    B->>B: Convert borrowed funds if required
    B->>P: Establish or increase payout buffer
    P->>R: Pay beneficiary from buffer
    B->>P: Customer payment funds replenish account
    Note over B,P: Buffer supports further eligible payments
    P->>B: Return available buffer when released
    B->>B: Assemble repayment in required stablecoin
    B->>Q: Repay principal and interest
```

## How Qiro Fits

| Item             | Description                                                                                                 |
| ---------------- | ----------------------------------------------------------------------------------------------------------- |
| Borrower         | The payment company maintaining partner balances                                                            |
| What Qiro Funds  | Temporary liquidity buffers or destination payout balances                                                  |
| Repayment Source | Released buffer capital or other eligible borrower treasury liquidity                                       |
| Business Value   | Support faster payouts and higher payment volumes with less own capital distributed across payment partners |

## Operating the Buffer

An individual replenishment may take minutes, while the borrower uses the facility across a longer daily operating window to support repeated payments.

Replenishing a partner account does not itself repay Qiro. Funds must become available for the borrower's repayment. Buffer-release arrangements and any necessary conversion are agreed for the approved flow.

[Accessing Liquidity](file:///2125505/accessing-liquidity.md) · [All Use Cases](file:///2125505/README.md)


# FX settlement financing

**Deliver the agreed destination currency before receiving the client's source currency.**

## When You Need It

Your client needs a beneficiary paid before its incoming source-currency transfer settles.

Qiro provides liquidity for the approved conversion and payment. The client's subsequent settlement provides the repayment source.

## Funds Flow

```mermaid
sequenceDiagram
    participant C as FX Client
    participant B as FX Provider Treasury
    participant Q as Qiro Facility
    participant L as FX and Payout Partner
    participant R as Beneficiary

    C-->>B: Confirm FX transaction and beneficiary
    Q->>B: Fund approved stablecoin drawdown
    B->>L: Fund agreed currency conversion
    L->>R: Deliver destination currency
    C->>B: Source-currency payment settles
    B->>L: Convert settled funds for repayment
    L->>B: Deliver required repayment stablecoin
    B->>Q: Repay principal and interest
```

## How Qiro Fits

| Item             | Description                                                                                                   |
| ---------------- | ------------------------------------------------------------------------------------------------------------- |
| Borrower         | The approved FX provider                                                                                      |
| What Qiro Funds  | Delivery of destination currency before client settlement                                                     |
| Repayment Source | The client's source-currency settlement, converted as required                                                |
| Business Value   | Offer earlier settlement on approved FX transactions while matching borrowing to an identified client payment |

## What Makes This Flow Distinct

This flow delivers destination fiat. The OTC flow delivers stablecoins to the purchaser. FX exposure and any required hedging remain part of the approved transaction structure.

[Accessing Liquidity](file:///2125505/accessing-liquidity.md) · [All Use Cases](file:///2125505/README.md)


# Liquidity provider settlement financing

**Deliver stablecoins while the fiat leg of your LP trade settles.**

## When You Need It

Your customer has already paid you. You have executed a stablecoin purchase with a liquidity provider, but the LP will release stablecoins only after receiving your fiat.

A banking cutoff, weekend or holiday delays that transfer. Qiro bridges the gap until the LP delivers the purchased stablecoins.

## Funds Flow

```mermaid
sequenceDiagram
    participant C as Customer
    participant B as Payment Company Treasury
    participant L as Liquidity Provider
    participant Q as Qiro Facility

    C->>B: Pay fiat for stablecoin purchase
    B-->>L: Execute agreed stablecoin purchase
    Note over B,L: Fiat transfer to LP is delayed
    Note over L: Stablecoins released after fiat receipt
    Q->>B: Fund approved stablecoin drawdown
    B->>C: Deliver stablecoins
    B->>L: Fiat payment settles when banking permits
    L->>B: Deliver purchased stablecoins
    B->>Q: Repay principal and interest
```

## How Qiro Fits

| Item             | Description                                                                                 |
| ---------------- | ------------------------------------------------------------------------------------------- |
| Borrower         | The payment company or OTC business delivering to its customer                              |
| What Qiro Funds  | Stablecoin delivery while corresponding LP settlement is pending                            |
| Repayment Source | Stablecoins delivered by the LP; the borrower also provides interest and applicable charges |
| Business Value   | Continue serving customers while banking schedules delay LP settlement                      |

## What Makes This Flow Distinct

Customer fiat has already reached the borrower. The delayed leg is the borrower's payment to its LP.

The LP settles with the borrower, which then repays Qiro. A trading platform may record the transaction and settlement obligations without receiving funds or becoming the borrower. No particular platform integration is assumed.

[Accessing Liquidity](file:///2125505/accessing-liquidity.md) · [All Use Cases](file:///2125505/README.md)


# Off ramp prefunding

**Deliver local fiat before the corresponding customer stablecoins become available.**

## When You Need It

Your customer needs a bank payout, but the stablecoins funding that payout are still arriving.

Qiro provides approved stablecoin liquidity that you convert and route through your payout partners. Incoming customer stablecoins subsequently replenish your treasury for repayment.

## Funds Flow

```mermaid
sequenceDiagram
    participant C as Customer
    participant B as Off-Ramp Treasury
    participant Q as Qiro Facility
    participant P as Conversion and Payout Partner
    participant R as Beneficiary

    C-->>B: Submit approved off-ramp order
    Note over C,B: Incoming customer stablecoins are pending
    Q->>B: Fund approved stablecoin drawdown
    B->>P: Transfer stablecoins for conversion and payout
    P->>R: Deliver local fiat
    C->>B: Customer stablecoins become available
    B->>Q: Repay in required stablecoin
```

## How Qiro Fits

| Item             | Description                                                                                                            |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Borrower         | The approved off-ramp or payout company                                                                                |
| What Qiro Funds  | Local fiat payout before incoming customer stablecoins are available                                                   |
| Repayment Source | The corresponding customer stablecoins, converted if required, plus borrower funds for interest and applicable charges |
| Business Value   | Complete eligible fiat payouts sooner while bridging a defined incoming stablecoin settlement gap                      |

Where incoming funds differ from the repayment asset, the borrower completes the necessary conversion before repayment.

[Accessing Liquidity](file:///2125505/accessing-liquidity.md) · [All Use Cases](file:///2125505/README.md)


# Card programme settlement

**Meet card settlement deadlines while programme funding becomes available.**

## When You Need It

Your card programme must fund its issuing bank or settlement partner by a deadline. The corresponding programme funds or eligible receivables arrive later.

Qiro bridges that funding gap.

## Funds Flow

```mermaid
sequenceDiagram
    participant F as Programme Funding
    participant B as Card Programme Treasury
    participant Q as Qiro Facility
    participant L as Conversion Partner
    participant I as Issuing Bank

    Note over B,I: Card settlement obligation is due
    Q->>B: Fund approved stablecoin drawdown
    B->>L: Transfer stablecoins for required fiat
    L->>I: Fund programme settlement account
    Note over I: Complete downstream card settlement
    F->>B: Programme funds become available
    B->>L: Convert funds for repayment
    L->>B: Deliver required repayment stablecoin
    B->>Q: Repay principal and interest
```

## How Qiro Fits

| Item             | Description                                                                                                      |
| ---------------- | ---------------------------------------------------------------------------------------------------------------- |
| Borrower         | The approved card-programme or infrastructure entity                                                             |
| What Qiro Funds  | Temporary funding needed to meet card settlement obligations                                                     |
| Repayment Source | Identified programme funding or eligible settlement receivables                                                  |
| Business Value   | Meet approved settlement obligations without maintaining the full temporary requirement as idle treasury capital |

{% hint style="info" %}
If the settlement partner accepts the approved stablecoin directly, the outward conversion step is unnecessary. This flow addresses temporary settlement liquidity; a permanent restricted reserve requires a separate assessment.
{% endhint %}

[Accessing Liquidity](file:///2125505/accessing-liquidity.md) · [All Use Cases](file:///2125505/README.md)


# Accessing liquidity

All seven use cases follow the same core facility lifecycle. Your approved facility and transaction policy determine which activities can be financed.

{% stepper %}
{% step %}

## Check Your Facility

Retrieve the current facility status, borrowing availability, supported asset and designated wallet. Facility eligibility does not remove request-specific validation.
{% endstep %}

{% step %}

## Request a Drawdown

Submit the required amount, tenor and business-transaction context. Keep the idempotency key associated with the logical request.

Qiro validates the request before preparing the unsigned borrower transaction.
{% endstep %}

{% step %}

## Sign and Confirm Funding

Your designated wallet signs and broadcasts the prepared transaction. Qiro's current workflow then requires asynchronous approval and funding.

{% hint style="warning" %}
**A confirmed borrower request is not a funded drawdown.** Confirm `FUNDED` before relying on the liquidity for payments.
{% endhint %}
{% endstep %}

{% step %}

## Execute the Approved Flow

Use the funded liquidity through the agreed wallets, conversion partners and payment arrangements. Qiro provides credit; your business remains responsible for the underlying payment execution.
{% endstep %}

{% step %}

## Repay

When the repayment source becomes available, convert into the required asset if necessary and follow the repayment workflow. The current partner API fully repays one funded drawdown; it does not accept a borrower-selected partial amount.

Confirm `REPAID` and check the updated facility before drawing again. Sending tokens directly does not replace the documented repayment process.
{% endstep %}
{% endstepper %}

## API and Wallet Responsibilities

The API manages requests, preparation and status. Funds move through blockchain transactions.

Your business controls the designated wallet, authorizes signing, broadcasts its transactions and pays gas. Status endpoints are authoritative; webhooks provide lifecycle notifications.

## Availability and Repayment

Availability, permitted use, tenor and security arrangements are agreed during underwriting. An API request does not guarantee immediate funding. Each flow must identify funds available to the borrower for principal, accrued interest and applicable charges.

[Explore All Use Cases](/use-cases/use-cases)


# Qiro Vaults

What a Qiro Vault is, what it holds, and which parties act on it.

A Qiro Vault is a smart contract that pools stablecoin deposits from verified investors and holds them until they are deployed into curated private credit positions. It is the entry point for capital and the accounting layer for everything downstream.

### What the vault holds

At any moment a vault's assets are the sum of three things:

* **Idle cash**: stablecoins sitting in the vault, not yet deployed. This is what redemption claims are paid from.
* **Deployed principal**: capital currently out with borrowers through Subaccounts.
* **Earned yield**: interest accrued on deployed capital.

The vault itself implements no strategy. It holds, accounts, and issues shares; deployment decisions belong to the [Risk Curator](/vaults-stakeholders/risk-curator) and are executed through separate contracts. That separation is deliberate: it keeps the vault simple, and it means the vault never needs to know what any given position is invested in.

### Shares, not interest payments

Depositors receive **vault shares** representing proportional ownership of the vault as a whole, not a claim on any specific loan.

You do not receive interest payments. As borrowers repay, the vault's total assets rise while the share count stays flat, so each share becomes redeemable for more than it was. Your share balance never changes on its own. There is nothing to claim and nothing to compound.

### Who acts on a vault

Four distinct parties, deliberately separated:

| Party            | Does                                                                                    |
| ---------------- | --------------------------------------------------------------------------------------- |
| **Qiro**         | Underwrites every borrower, regardless of who curates the vault                         |
| **Risk Curator** | Decides which approved borrowers are funded, in what size, and when capital is recalled |
| **Servicer**     | Processes the redemption queue as idle cash becomes available                           |
| **Investor**     | Deposits, holds, and requests redemption                                                |

No single party does all four. In particular, the party allocating capital is not the party approving borrowers, and neither controls when redemptions clear.

### One vault, one strategy

Each vault is a separate deployment with its own asset, strategy, target return, liquidity terms, position limits, and curator. Vaults do not share capital, and a problem in one has no path to another.

Whether a vault is permissioned (restricted to whitelisted investors) is fixed at deployment and cannot be changed afterwards.

***

See [Subaccounts](/vaults-core-concepts/subaccounts) for how capital leaves the vault, and [Redemptions](/vaults-stakeholders/investors/redemptions) for how it comes back.


# Yield Sources

Where Subaccount capital is deployed to generate returns.

Yield Sources are the destinations where Subaccount capital is deployed. Qiro vaults use two types.

### Credit facilities

The primary source. Capital is lent to payment companies, private credit funds, and fintech lenders through bankruptcy-remote Special Purpose Vehicles, each established for one borrower relationship and standing as the legal lender to that borrower.

Yield is the interest the borrower pays, generated by the borrower's own business: settlement flows, receivables books, and loan portfolios.

### Liquid strategies

A portion of vault capital may be allocated to liquid yield sources such as T-bills or lending protocols like Aave. These earn a baseline return on capital not yet deployed to credit facilities, and maintain a liquidity buffer for servicing redemptions.

***

See [Subaccounts](/vaults-core-concepts/subaccounts) for how capital reaches these destinations, [Borrowers](/vaults-stakeholders/borrowers) for who receives it, and [Risks](/legal-disclosure/risks) for what can go wrong at each.


# Subaccounts

How vault capital is allocated into isolated mandates.

A Subaccount is an isolated allocation unit within a vault. It receives capital from the vault and deploys it under a defined mandate.

### Each Subaccount has a mandate

A Subaccount operates to a deployment strategy agreed with Qiro in advance: which facilities it may fund, how many, and in what proportions. It may hold several facilities at once.

### Isolation

Each Subaccount is a separate destination. Capital allocated to one is held apart from every other, and the accounting for each is tracked independently: how much has been deployed to it, how much has come back, and what it is currently worth.

### Subaccounts and SPVs

A Subaccount is an allocation layer. The lending itself is done by a **Deal SPV**, a bankruptcy-remote vehicle established for one borrower relationship, which holds the facility documentation, security package, and covenants. A Subaccount funding several facilities sits above several SPVs, one for each borrower.

***

See [How It Works](/about-us/how-it-works) for the full path capital takes, [NAV & Valuation](/vaults-core-concepts/nav-and-valuation) for how deployed capital is valued, and [Yield Sources](/vaults-core-concepts/yield-sources) for what happens at the borrower end.


# Fees

The two fees a Qiro vault charges, how they accrue, and when they are paid out.

A Qiro vault charges two fees: a **management fee** on assets, and a **performance fee** on gains. Each vault sets its own rates, both capped by the contracts and reflected in the share price you see.

### Management fee

An annualised fee on the vault's total assets, accruing continuously and pro-rated per second.

Accrual pauses while the vault is paused, so you pay for the intervals it was live.

### Performance fee

Charged on gains above the vault's **high-water mark**, the highest share price it has reached. Because the mark only moves up, a vault that falls and recovers charges again only once it passes its previous peak.

If the vault's value falls after a performance fee has accrued but before it is collected, the accrued fee is reduced to match.

### How fees accrue

Fees accrue as **amounts of the vault's underlying asset**, held against the vault until they are collected.

Accrued fees are reserved out of the vault's cash: they are excluded from the balance available for deployment and for servicing redemptions, and subtracted from the vault's assets when the share price is calculated.

Settlement happens automatically at the points where an accurate figure matters: on every deposit, mint, claim, and before the redemption queue is serviced.

### Collection

Accrued fees are paid out by the **fee manager**, a role held separately from the vault owner and the curator. Performance and management fees go to two independently configured collector addresses, and after the first collection subsequent collections must be at least **15 days** apart.

### Changing fee rates

Rates and collector addresses are set by a separate authority, not by the curator. Existing fees settle at the old rate before a new one takes effect, so a change applies only from the point it lands.

***

See [NAV & Valuation](/vaults-core-concepts/nav-and-valuation) for how fees enter the share price.


# NAV & Valuation

How a vault's assets are valued, who sets the value of deployed capital, and what constrains them.

Everything an investor earns shows up in one number: what a share is worth. That number is the vault's net asset value divided by the shares outstanding.

### What NAV consists of

```
NAV = idle cash + value of deployed capital − accrued fees
```

**Idle cash** is the vault's own token balance, less assets already earmarked for serviced redemptions and less fees accrued but not yet collected.

**Accrued fees** are a claim against the vault that has arisen but not yet been paid out. They are subtracted, so the share price you see is already net of them. See [Fees](/vaults-core-concepts/fees).

### The value of deployed capital

Once capital leaves a Subaccount for a borrower, its value is a fact about that borrower's obligations rather than a balance any contract can query. So the value is reported: **the curator posts it**, updated as the underlying facilities perform.

The contract rate-limits that mark, so a valuation cannot jump by an arbitrary amount in a single update. The curator's other limits are set out on [Risk Curator](/vaults-stakeholders/risk-curator).

### The two valuation bases

If the vault used a single price:

* **Single optimistic price:** a new depositor entering while yield is accruing would immediately own a pro-rata share of that unrealised yield, diluting existing holders who earned it.
* **Single conservative price:** an investor exiting could only claim principal, never the yield accrued during their holding period.

So the vault keeps both figures and uses each where it fits.

**Optimistic** counts three things: the idle cash in the vault, the capital currently out with borrowers, and the interest that capital has earned so far but has not yet been repaid. This is what deposits are priced at, and what the vault reports as its NAV.

**Conservative** counts the first two and leaves out the third. Interest earned but not yet received is held back until it actually arrives. This is what redemptions are priced at.

The gap between the two is therefore the yield that has been earned but not yet collected.

***

See [Subaccounts](/vaults-core-concepts/subaccounts) for where deployed capital sits, [Fees](/vaults-core-concepts/fees) for the fee mechanics, and [Risks](/legal-disclosure/risks) for valuation risk in context.


# Protocol

The contracts a Qiro vault is built from, and who is permitted to call them.

A Qiro vault is a small set of purpose-built contracts, deployed per vault and immutable once live. These pages describe them.

* [Flow of Funds](/vaults-technical-overview/protocol/flow-of-funds): the path capital takes from an investor to a borrower and back.
* [Smart Contract Architecture](/vaults-technical-overview/protocol/smart-contract-architecture): each contract, what it is responsible for, and how they are wired together, with the deployment, redemption and valuation flows.
* [Protocol Actors](/vaults-technical-overview/protocol/protocol-actors): every role, what it can and cannot do, and which powers sit behind a timelock.

For the economic model these contracts implement, see [NAV & Valuation](/vaults-core-concepts/nav-and-valuation) and [Fees](/vaults-core-concepts/fees).


# Flow of Funds

The path capital takes from an investor to a borrower, and back again.

Deposited capital passes through four contracts before it reaches a borrower, and returns along the same path.

```mermaid
flowchart TD
    I(["Investor"])
    V["StakedVault"]
    VSM["VaultStrategyManager"]
    PM["SubaccountPositionManager"]
    SA["Subaccount wallet"]
    B(["Borrower or<br/>liquid strategy"])

    I -- deposit --> V
    V -- allocate --> VSM
    VSM -- deploy --> PM
    PM -- invest --> SA
    SA -- fund --> B

    B -. repay .-> SA
    SA -. redeem .-> PM
    PM -. return .-> VSM
    VSM -. return .-> V
    V -. claim .-> I

    classDef onchain fill:#6B56F1,stroke:#6B56F1,stroke-width:0px,color:#FFFFFF;
    classDef edge fill:#4C33D9,stroke:#4C33D9,stroke-width:0px,color:#FFFFFF;
    classDef offchain fill:#1E1B3A,stroke:#6B56F1,stroke-width:2px,color:#FFFFFF;
    classDef actor fill:#0F766E,stroke:#0F766E,stroke-width:0px,color:#FFFFFF;

    class V,VSM onchain;
    class PM edge;
    class SA offchain;
    class I,B actor;

    linkStyle 0,1,2,3,4 stroke:#6B56F1,stroke-width:2px;
    linkStyle 5,6,7,8,9 stroke:#0D9488,stroke-width:2px;
```

Solid arrows are deployment, dotted arrows are repayment.

### Investment and Deployment

An investor deposits and receives shares. The curator calls `invest()` on the position manager, which draws the capital from the vault through the Vault Strategy Manager and transfers it to a whitelisted subaccount wallet. From there it funds a credit facility through a Deal SPV, or sits in a liquid strategy as the vault's liquidity buffer.

Capital is **pulled by the position manager**, not pushed by the vault. See [Smart Contract Architecture](/vaults-technical-overview/protocol/smart-contract-architecture#vaultstrategymanager).

### Repayment and Redemption

A borrower repays into the subaccount. The curator calls `redeem()`, which pulls the capital back through the position manager and the Vault Strategy Manager into the vault, where it becomes **idle cash**.

Idle cash is what the redemption queue is serviced from. A request becomes claimable because capital came back, not because a timer elapsed.

***

For how an investor requests and claims, see [Redemptions](/vaults-stakeholders/investors/redemptions). For each contract in detail, see [Smart Contract Architecture](/vaults-technical-overview/protocol/smart-contract-architecture).


# Smart Contract Architecture

The contracts a Qiro vault is built from, what each is responsible for, and how they are wired together.

A Qiro vault is not a single contract. It is a small set of contracts with one responsibility each, deployed per vault and wired together at construction.

This page describes each contract in turn. For the path capital takes through them, see [Flow of Funds](/vaults-technical-overview/protocol/flow-of-funds); for the economic model they implement, see [NAV & Valuation](/vaults-core-concepts/nav-and-valuation) and [Fees](/vaults-core-concepts/fees); for who is permitted to call what, see [Protocol Actors](/vaults-technical-overview/protocol/protocol-actors).

### Core contracts

```mermaid
flowchart TD
    INV(["Investors"])

    subgraph PROTO["Protocol contracts"]
        V["StakedVault<br/>(shares, pricing, fees)"]
        RM["RedemptionManagerFifoQueue<br/>(redemption queue)"]
        VSM["VaultStrategyManager<br/>(capital allocation)"]
        PM["SubaccountPositionManager<br/>(deployment and NAV)"]
    end

    subgraph OUT["Outside the contracts"]
        SA["Subaccount wallets<br/>(EOA / multisig)"]
        SPV["Deal SPVs<br/>(bankruptcy-remote legal lender)"]
        B["Borrowers"]
        LIQ["Liquid strategies<br/>(T-bills, lending protocols)"]
    end

    INV -- "deposit / redeem" --> V
    V <-- "requests, servicing" --> RM
    V <-- "idle cash, NAV" --> VSM
    VSM <-- "1:N" --> PM
    PM -- "invest / redeem" --> SA
    SA -- "facility funding" --> SPV
    SPV -- "drawdown / repayment" --> B
    SA -- "liquidity buffer" --> LIQ

    classDef onchain fill:#6B56F1,stroke:#6B56F1,stroke-width:0px,color:#FFFFFF;
    classDef edge fill:#4C33D9,stroke:#4C33D9,stroke-width:0px,color:#FFFFFF;
    classDef offchain fill:#1E1B3A,stroke:#6B56F1,stroke-width:2px,color:#FFFFFF;
    classDef actor fill:#0F766E,stroke:#0F766E,stroke-width:0px,color:#FFFFFF;

    class V,RM,VSM onchain;
    class PM edge;
    class SA,SPV,LIQ offchain;
    class INV,B actor;

    style PROTO fill:none,stroke:#6B56F1,stroke-width:1px,stroke-dasharray:5 5;
    style OUT fill:none,stroke:#8E8AA8,stroke-width:1px,stroke-dasharray:5 5;
```

Nothing in the lower group is a Qiro contract. Subaccount wallets are EOA or multisig wallets, Deal SPVs are legal entities, and borrowers are companies; liquid strategies may themselves be third-party contracts, but none of them are reachable by Qiro's access control. The `SubaccountPositionManager` is the last contract in the chain, and therefore the point where on-chain enforcement ends and reporting begins.

### StakedVault

The share ledger and the contract investors interact with. It is `ERC20` plus `IERC4626`, with asynchronous redemptions following ERC-7540.

It holds idle cash, issues and burns shares, maintains the two valuation bases, accrues and settles fees, enforces the investor whitelist, and can be paused.

```solidity
function deposit(uint256 assets, address receiver)
    external
    onlyWhitelisted(msg.sender)
    onlyWhitelisted(receiver)
    nonReentrant
    whenNotPaused
    returns (uint256 shares);
```

Fees settle before the price is taken, so the share price you transact at is already net of them:

```mermaid
sequenceDiagram
    actor Investor
    participant V as StakedVault

    Investor->>V: deposit(assets, receiver)
    Note right of V: sender and receiver must both be whitelisted
    V->>V: settle accrued fees
    V->>V: price at the optimistic valuation
    V-->>Investor: shares
```

### RedemptionManagerFifoQueue

Holds the redemption queue. When an investor calls `requestRedeem`, their shares move here and are held while the request is outstanding.

One Redemption Manager serves exactly one vault. Requests are serviced in submission order, sized by the operator rather than the requester, so a single request can be filled across several rounds:

```solidity
function serviceRequests(uint256 shares) external nonZeroAmount(shares) onlyOwner;
```

The three phases are separate transactions, by separate parties:

```mermaid
sequenceDiagram
    actor Investor
    participant V as StakedVault
    participant RM as RedemptionManagerFifoQueue
    actor Operator

    Investor->>V: requestRedeem(shares, controller, owner)
    V->>RM: shares held, request ID issued
    Operator->>RM: serviceRequests(shares)
    Note right of RM: shares burned at the conservative valuation
    Investor->>V: redeem() or withdraw()
    RM-->>Investor: assets
```

Three limits are enforced at request time: a minimum request size derived from the asset's decimals, a cap on active requests per owner, and a cap per controller. Claiming remains available while the vault is paused and to an address that has since been removed from the whitelist.

### VaultStrategyManager

The capital-allocation boundary, and the only contract the vault trusts to move idle cash out to strategies. One VSM serves exactly one vault; it is bound to that vault by an immutable `VAULT`.

It has three responsibilities: whitelist position managers and set a per-PM `sanctionedLimit`; route capital between the vault and its PMs; and aggregate each PM's conservative and optimistic valuation into the single NAV the vault prices against.

Its authority is split by direction of risk, which is the pattern to understand before reading [Protocol Actors](/vaults-technical-overview/protocol/protocol-actors):

| Direction       | Examples                    | Authority                |
| --------------- | --------------------------- | ------------------------ |
| Risk-increasing | whitelist a PM, raise a cap | `onlyTimelock` — delayed |
| De-risking      | remove a PM, lower a cap    | `onlyOwner` — instant    |

Capital movement itself is neither: `withdrawFromVault` and `depositToVault` are callable only by an already-whitelisted position manager.

Capital is therefore **pulled by the position manager**, not pushed by the vault:

```mermaid
sequenceDiagram
    actor Curator
    participant PM as SubaccountPositionManager
    participant VSM as VaultStrategyManager
    participant V as StakedVault
    participant SA as Subaccount wallet

    Curator->>PM: invest(subaccount, amount)
    PM->>VSM: withdrawFromVault(amount)
    VSM->>V: draw idle cash
    V-->>PM: assets
    PM->>SA: transfer
```

Capital returns the same way, and this is the link between a facility repaying and a redemption becoming claimable:

```mermaid
sequenceDiagram
    actor Curator
    participant SA as Subaccount wallet
    participant PM as SubaccountPositionManager
    participant VSM as VaultStrategyManager
    participant V as StakedVault

    Curator->>PM: redeem(subaccount, amount)
    PM->>SA: safeTransferFrom
    SA-->>PM: assets
    PM->>VSM: depositToVault(amount)
    VSM->>V: depositFunds(amount)
    Note right of V: lands as idle cash
```

Returned capital lands as vault idle cash, and idle cash is what the Redemption Manager draws on when the queue is serviced. A request becomes claimable because capital came back, not because a timer elapsed.

### SubaccountPositionManager

The only position manager type in use. It deploys vault capital to whitelisted subaccount wallets and surfaces a single aggregate NAV back to the VSM. One VSM may whitelist several PMs; one PM may hold several subaccounts.

What a subaccount does with that capital is not fixed by the contracts. It may fund a credit facility through a Deal SPV, or sit in liquid strategies such as T-bills or lending protocols, which is where the vault's liquidity buffer is held. See [Yield Sources](/vaults-core-concepts/yield-sources).

`externalAssets` is the single source of truth for deployed value. It is incremented by `invest()`, decremented by `redeem()`, and overwritten by `setNAV()`. It carries the **optimistic** NAV by design, and both valuation tiers return it unchanged, so the position manager applies no haircut of its own. The mark is posted by the curator.

```solidity
function setNAV(uint256 currentExternalAssets, uint256 newExternalAssets) external onlyCurator;
```

Three properties of the call:

* **A deviation guard**, time-weighted: the permitted change in basis points grows linearly with the time elapsed since the last update, so a mark cannot jump arbitrarily in one step. The call also passes the current mark and reverts if it has moved since, so an update cannot be applied to a figure the curator did not see.
* **Fees settle first.** Before an overwrite, `setNAV()` settles vault fees against the *old* mark, so investors are not back-charged fees on an increase in NAV that had not yet been reported.
* **Staleness is a signal, not a gate.** Once capital is deployed, `isStale()` reports whether `maxStaleness` has elapsed since the last update. It is informational only — it does not block valuation, `invest()`, or `redeem()`.

```mermaid
sequenceDiagram
    actor Curator
    participant PM as SubaccountPositionManager
    participant VSM as VaultStrategyManager

    Curator->>PM: setNAV(current, new)
    Note right of PM: reverts if current no longer matches<br/>the stored mark, or if the change<br/>exceeds the deviation budget
    PM->>VSM: chargeFees()
    Note right of VSM: fees settle against the old mark
    PM->>PM: externalAssets = new
```

Capital moves only as the vault's native asset; there is no swap router in the path. `invest()` pushes via `safeTransfer`; `redeem()` pulls via `safeTransferFrom`, which requires the subaccount wallet to have approved the PM first.

### VaultFactory

A permissioned factory that deploys `StakedVault` instances and records them in `isFactoryVault`.

The VSM and Redemption Manager are deployed **before** the vault, the reverse of the order the diagram suggests. The caller queries `predictNextVaultAddress()`, constructs the VSM and RM against that predicted address, then passes both into `deployVault`. Vault ownership is set directly in the vault's constructor, so the factory never holds it.

### TimelockGovernable

Not a standalone deployment but the access-control base the vault, the VSM, and every position manager inherit, and the reason two authorities exist throughout the system.

`owner` is instant and handles de-risking and operational calls. `timelock` is delayed and handles risk-increasing ones. The pattern is applied consistently at each layer: changing fee rates on the vault, whitelisting a position manager or raising its cap on the VSM, and adding a subaccount — a new destination for capital — on the position manager.

`setTimelock` is itself `onlyTimelock`, so the timelock authority can only ever be rotated through its own delay. The owner cannot re-point it to bypass that.

### Upgradeability

There is none, by design. No contract in the system uses a proxy, an initializer, or an upgrade hook — no UUPS, no transparent proxy, no `ERC1967`. Deployed bytecode is final.

New behaviour ships as a new deployment rather than an upgrade.

***

Deployed addresses are on [Contract Addresses](/vaults-technical-overview/contract-addresses). Review coverage is on [Security Audits](/vaults-technical-overview/security-audits). Permissions are set out in full on [Protocol Actors](/vaults-technical-overview/protocol/protocol-actors).


# Protocol Actors

Every role in a Qiro vault, what it can and cannot do, and which powers sit behind a delay.

A Qiro vault separates authority across several roles rather than concentrating it in one administrator. This page lists each role, what it controls, and what it cannot reach.

One distinction runs through the whole table and is worth reading first.

### Instant authority and delayed authority

Every governed contract carries two authorities, not one. The split is by **direction of risk**, not by seniority:

```mermaid
flowchart LR
    OWN["owner<br/>instant"]
    TL["timelock<br/>delayed"]
    DE["De-risking<br/>remove a PM, lower a cap,<br/>pause, rotate a role holder"]
    RI["Risk-increasing<br/>whitelist a PM, raise a cap,<br/>change fee rates"]

    OWN --> DE
    TL --> RI

    classDef instant fill:#6B56F1,stroke:#6B56F1,stroke-width:0px,color:#FFFFFF;
    classDef delayed fill:#3D28B8,stroke:#3D28B8,stroke-width:0px,color:#FFFFFF;
    classDef act fill:#1E1B3A,stroke:#6B56F1,stroke-width:2px,color:#FFFFFF;

    class OWN instant;
    class TL delayed;
    class DE,RI act;
```

Anything that reduces exposure can be done immediately; anything that increases it waits. The timelock is seeded to the owner at construction and handed to an external timelock contract afterwards — see [Smart Contract Architecture](/vaults-technical-overview/protocol/smart-contract-architecture#timelockgovernable) for why that handoff cannot be reversed.

### Roles

| Role                           | Can do                                                                                                                                                                                                      | Cannot do                                                                                                                              | Constraint                                                                                                           |
| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| **Owner**                      | <p>Rotate role holders — fee manager, whitelist manager, pausers, curator<br>Remove a position manager<br>Lower a sanctioned limit<br>Service the redemption queue<br>Cancel a request administratively</p> | <p>Change fee rates<br>Whitelist a position manager<br>Raise a cap<br>Add a subaccount<br>Move investor capital to itself</p>          | <p>Instant.<br>Non-renounceable; transfer is two-step and blocked until the timelock is wired</p>                    |
| **Timelock**                   | <p>Change fee rates and collectors<br>Whitelist a position manager<br>Raise a sanctioned limit<br>Add a subaccount<br>Rotate the timelock itself</p>                                                        | Anything reserved to the owner or the curator                                                                                          | Every call sits behind the external timelock's delay                                                                 |
| **Fee Manager**                | Collect accrued performance and management fees to their configured collectors                                                                                                                              | <p>Set fee rates<br>Set collector addresses<br>Touch investor capital</p>                                                              | Collections must be at least **15 days** apart after the first                                                       |
| **Curator**                    | <p>Deploy capital to a whitelisted subaccount via <code>invest()</code><br>Pull it back via <code>redeem()</code><br>Post the NAV mark via <code>setNAV()</code></p>                                        | <p>Move capital to an address that is not a whitelisted subaccount<br>Add a subaccount<br>Set its own limits<br>Withdraw to itself</p> | <p><code>setNAV()</code> is bounded by a time-weighted deviation guard<br>Fees settle against the old mark first</p> |
| **Investor Whitelist Manager** | Add and remove investor addresses from the whitelist                                                                                                                                                        | Anything else                                                                                                                          | Exists only in permissioned vaults; reverts if the vault is permissionless                                           |
| **Pauser**                     | Pause and unpause the vault                                                                                                                                                                                 | Any configuration or capital movement                                                                                                  | Several pausers may hold the role at once; added by the owner                                                        |
| **Investor**                   | <p>Deposit and mint<br>Request redemption<br>Claim and cancel<br>Delegate to an operator</p>                                                                                                                | Transfer shares to a non-whitelisted address                                                                                           | <p>Must be whitelisted in a permissioned vault<br>Deposits and requests require the vault unpaused</p>               |
| **Operator**                   | Request, claim and cancel on behalf of a controller who approved them                                                                                                                                       | Anything the controller could not do                                                                                                   | Approved per address by the controller via `setOperator`                                                             |

Contracts hold authority over one another too. The Vault accepts capital instructions only from its Vault Strategy Manager, and share movements tied to redemption only from its Redemption Manager; the VSM accepts capital calls only from a position manager it has already whitelisted.

### What the timelock gates

Five calls sit behind the delay. Every one of them either opens a new route for capital or increases what can flow down an existing route.

| Contract                                                                                                       | Call                              | Effect                                      |
| -------------------------------------------------------------------------------------------------------------- | --------------------------------- | ------------------------------------------- |
| `StakedVault`                                                                                                  | `setFeeConfig`                    | Changes fee rates and collector addresses   |
| `VaultStrategyManager`                                                                                         | `setWhitelistStatus(pm, true, …)` | Admits a new position manager               |
| `VaultStrategyManager`                                                                                         | `raiseSanctionedLimit`            | Increases a position manager's cap          |
| `SubaccountPositionManager`                                                                                    | `addSubaccount`                   | Admits a new destination wallet for capital |
| <p><code>StakedVault</code><br><code>VaultStrategyManager</code><br><code>SubaccountPositionManager</code></p> | `setTimelock`                     | Rotates the timelock authority itself       |

Their de-risking counterparts are deliberately **not** delayed: removing a position manager is `setWhitelistStatus(pm, false, …)` and lowering a cap is `lowerSanctionedLimit`, both instant on the owner, so a position manager behaving badly can be dropped without waiting.

Two properties keep the delay from being sidestepped. `setTimelock` is itself timelocked, so the authority can only be rotated through its own delay and the owner can never re-point it. And `raiseSanctionedLimit` rejects a value that is not strictly greater than the current cap, so it cannot be used as a back door to lower one instantly.

***

See [Smart Contract Architecture](/vaults-technical-overview/protocol/smart-contract-architecture) for the contracts these roles act on.


# Security Audits

Security review of the Qiro Credit Vault contracts.

The Qiro Credit Vault smart contracts have been audited by **Sherlock & Cyfrin**.

The full report is available on request. See [Get in Touch](/about-us/get-in-touch).

Deployed addresses are listed on [Contract Addresses](/vaults-technical-overview/contract-addresses), and every contract is verified on Etherscan.


# Contract Addresses

Deployed contract addresses for Qiro Credit Vaults on Ethereum mainnet. All contracts are deployed on Ethereum mainnet and verified on Etherscan.

### Qiro Protocol

<table><thead><tr><th width="262.76171875">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Vault Factory</td><td><a href="https://etherscan.io/address/0x92845599127e8fccae5dfceb6c48afbb92e301e2"><code>0x92845599127e8FCcAE5dFceb6c48AFbb92E301e2</code></a></td></tr><tr><td>Timelock</td><td><a href="https://etherscan.io/address/0x06c95f33a160a12de4668b004726c8adde0804dd"><code>0x06C95f33a160A12de4668B004726C8aDDe0804Dd</code></a></td></tr></tbody></table>

### Qiro Short Term Credit Vault (QSTC)

<table><thead><tr><th width="258.76171875">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Vault</td><td><a href="https://etherscan.io/address/0x222be68b7143f23512baeb0700cb6d83efe58945"><code>0x222Be68b7143f23512Baeb0700Cb6D83EFE58945</code></a></td></tr><tr><td>Vault Strategy Manager</td><td><a href="https://etherscan.io/address/0x189e1628dd7f790ea7d93a278405f3e803bba226"><code>0x189e1628Dd7F790EA7d93a278405f3e803Bba226</code></a></td></tr><tr><td>Redemption Manager</td><td><a href="https://etherscan.io/address/0x47a8cff2875bf51355d947ccbab199e894da4ba9"><code>0x47A8CfF2875Bf51355D947CCBab199E894DA4BA9</code></a></td></tr><tr><td>Subaccount Position Manager</td><td><a href="https://etherscan.io/address/0xa02f8c432924ed474f6638905f91607366097e7e"><code>0xa02F8c432924eD474F6638905F91607366097e7E</code></a></td></tr></tbody></table>

Always confirm the address against this page before interacting with a contract.


# Qiro Short Term Credit Vault

**Vault 1: Qiro Short Term Credit Vault**

**12% APY** | Weekly redemptions | 1 Month lock-up | $25M target | Min. $250K

#### Strategy

Secured advances to KYB'd cross-border payment processors and remittance platforms. Capital is deployed against in-transit settlement flows and processor receivables. The book is continuously revolving: facilities run on 1-3 day cycles (up to 7 days), so capital recycles rapidly and the underlying exposure is always short-dated.

#### Underlying Borrower profile

Cross-border payment processors and remittance platforms. These are companies with high-frequency, predictable settlement flows: the receivables backing each advance are specific, traceable, and short-lived. Qiro's underwriting process KYBs each borrower before any capital is committed.

#### Structure

* Security: overcollateralized, secured by receivables
* Asset : USD1
* Fees: 10% performance fee, 0.5% management fee
* Curator: Qiro

#### Fit

Best for investors who want the highest yield with the shortest effective duration and fastest redemption cadence. The revolving nature of PayFi receivables means the underlying exposure resets frequently, making this the most liquid of the three vaults.


# Private Credit Vault

### Vault 2: Private Credit Vault

**13% APY** | Monthly redemptions | 35-day lock-up | $10M target | Min. $500K

#### Strategy

Diversified capital allocation to established private credit, venture debt, and specialty finance funds that extend secured and structured loans to fintech, payment, and lending platforms globally. Rather than lending directly to individual borrowers, this vault allocates to fund-level vehicles, gaining diversified exposure across multiple underlying credit strategies.

#### Borrower profile

Established private credit funds and specialty finance vehicles with track records across fintech lending, payments infrastructure, and alternative credit. Qiro underwrites each fund: financial analysis, portfolio composition, manager quality, historical performance.

#### Structure

* Security: overcollateralized, secured by receivables
* Position: secured
* Fees: 10% performance fee, 1% management fee
* Curator: Qiro
* Bonus: token incentives

#### Fit

Best for investors who want diversified private credit exposure without single-borrower concentration risk, with a monthly liquidity cadence. The fund-of-funds approach distributes risk across multiple underlying strategies and geographies.


# Institutional Credit Vault

### Vault 3: Institutional Credit Vault

**12% APY** | Quarterly redemptions | 6-month lock-up | $15M target | Min. $500K

#### Strategy

Secured financing to non-bank financial institutions (NBFIs), with each facility backed by a diversified pool of the borrower's underlying retail and SME receivables, across supply chain finance, invoice discounting, inventory financing, and business lending.

#### Borrower profile

Established fintech lenders and NBFIs with diversified loan books. The collateral for each facility is the borrower's own receivables portfolio, not a single asset or single obligor. Qiro underwrites both the institution and the quality of the underlying receivables pool.

#### Structure

* Security: overcollateralized, secured by receivables
* Position: secured
* Fees: 10% performance fee, 1% management fee
* Curator: Qiro
* Bonus: token incentives

#### Fit

Best for investors seeking the most institutional exposure profile (longer duration, highest capital target, broadest geographic diversification) and who can tolerate a 6-month lock-up in exchange for stable, predictable yield from seasoned lenders.


# Qiro Instant Settlement

Qiro Instant Settlement lets an approved partner request, track, and repay credit against a Qiro-managed revolving line of credit.

The integration is non-custodial. Qiro validates workflow state, prepares unsigned blockchain transactions, reconciles verified contract events, and sends signed webhooks. The partner controls the designated wallet, signs transactions, broadcasts them, and pays gas. Qiro never receives the wallet private key.

Status APIs are the system of record. Webhooks are at-least-once notifications that help the partner react quickly, but the partner should reconcile final state through the relevant status endpoint.

## What to use

| Business task                | Recommended SDK/API path                                           |
| ---------------------------- | ------------------------------------------------------------------ |
| Authenticate                 | `POST /oauth/token`                                                |
| Read approved facility state | `GET /v1/facilities/{facility_id}`                                 |
| Request a drawdown           | SDK `requestDrawdown(...)` or drawdown REST workflow               |
| Activate a pending facility  | SDK `activateFacility(...)` or activation REST workflow            |
| Repay one funded drawdown    | SDK `repayDrawdown(...)` or repayment REST workflow                |
| Repay and close a facility   | SDK `repayAndCloseFacility(...)` or facility closure REST workflow |
| Receive lifecycle updates    | Signed webhooks plus status reconciliation                         |

Default recovery and drawdown cancellation are planned contract workflows, but they are not enabled in the current partner API or SDK.

The exact API contract is maintained in the OpenAPI specification file at `openapi.yaml`. The GitBook owner will register that file and insert the rendered OpenAPI Reference separately.

## Documentation map

* [Overview](/developer-section/qiro-instant-settlement/overview)
* [Authentication](/developer-section/qiro-instant-settlement/authentication)
* [Facilities](/developer-section/qiro-instant-settlement/facilities)
* [Drawdowns](/developer-section/qiro-instant-settlement/drawdowns)
* [Repayments](/developer-section/qiro-instant-settlement/repayments)
* [Facility closures](/developer-section/qiro-instant-settlement/facility-closures)
* [Facility activation](/developer-section/qiro-instant-settlement/facility-activation)
* [SDK](/developer-section/qiro-instant-settlement/sdk)
* [Webhooks](/developer-section/qiro-instant-settlement/webhooks)
* [Errors and idempotency](/developer-section/qiro-instant-settlement/errors-and-idempotency)


# Overview

Qiro Instant Settlement separates API authorization from wallet authorization.

An OAuth access token allows the partner application to call Qiro APIs. It cannot move funds. Money moves only when the approved designated wallet signs and broadcasts a blockchain transaction prepared by Qiro.

Qiro owns:

* partner authentication and resource authorization;
* facility, policy, chain, token, contract, and wallet resolution;
* request validation and unsigned transaction preparation;
* contract-event reconciliation;
* normalized status APIs and signed webhooks.

The partner owns:

* OAuth client credential custody;
* designated wallet custody and signing policy;
* gas payment and transaction broadcasting;
* webhook receipt, deduplication, and status reconciliation.

Qiro never accepts partner-supplied wallet, chain, contract, rate, fee, credit-limit, or allocation overrides for money-moving operations.

## Lifecycle pattern

Most money-moving workflows follow the same pattern:

1. The partner creates a durable resource with an idempotency key.
2. Qiro validates business and contract state.
3. Qiro returns a short-lived unsigned transaction preparation.
4. The partner wallet signs and broadcasts exactly that transaction.
5. Qiro verifies contract evidence and updates the resource status.
6. Qiro sends a signed webhook for partner-relevant lifecycle changes.

Status endpoints are authoritative. Webhooks are at least once and may arrive more than once or out of order across different resources.

## OpenAPI specification

Use the guides for workflow context. The exact API contract is maintained in `openapi.yaml`. The GitBook owner will register that file and insert the rendered OpenAPI Reference separately.


# Authentication

Qiro uses OAuth 2.0 client credentials for partner API access.

```http
POST /oauth/token
Authorization: Basic <base64(client_id:client_secret)>
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
```

Equivalent sanitized curl form:

```sh
curl -u "${QIRO_CLIENT_ID}:${QIRO_CLIENT_SECRET}" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "grant_type=client_credentials" \
  "${QIRO_API_BASE_URL}/oauth/token"
```

The access token is short-lived. Current tokens are valid for 15 minutes. The partner backend should request a new token when needed and should not expose OAuth client credentials to browsers, wallets, or mobile clients.

## Access token versus wallet signature

The access token authorizes API calls. It does not authorize blockchain transactions.

Every transaction that can move funds still requires the active designated wallet to sign. The SDK receives the access token and a wallet client, verifies Qiro’s prepared transaction, and asks the wallet client to sign only the checked calldata.

## Correlation IDs

`X-Correlation-ID` is a partner trace identifier. It is useful for logs, support, and webhook correlation.

Correlation IDs are not credentials. They do not affect idempotency. Some endpoints require them; others allow Qiro or the SDK to generate one when omitted. Qiro echoes the effective correlation ID in responses.

## Scopes

Tokens include scopes for the resources the partner may access, such as:

* `facilities:read`
* `drawdowns:read`
* `drawdowns:write`
* `repayments:read`
* `repayments:write`
* `closures:read`
* `closures:write`
* `activations:read`
* `activations:write`

The OpenAPI specification file lists the required scope for each enabled route.


# Facilities

A facility is the partner-facing view of one approved Qiro revolving line of credit.

```http
GET /v1/facilities/{facility_id}
```

The response includes:

* facility status;
* approved, utilized, and available amounts;
* supported settlement assets;
* drawdown eligibility;
* designated wallet ID, version, address, chain, and purpose;
* resource version and update time.

The partner cannot override facility configuration in later requests. Qiro resolves the trusted LOC contract, Viewer, Vault, payment token, chain, designated wallet, and drawdown policy from the `facility_id`.

## Eligibility

`drawdown_eligibility` reports current facility-level blockers. Request-specific checks still run when a drawdown is submitted, including amount, tenor, corridor, active wallet, contract state, liquidity, and policy rules.

Facilities imported before the borrower pays the processing fee return `status: "PENDING_ACTIVATION"`. Drawdowns are not eligible in that state and include `FACILITY_NOT_ACTIVE` as a blocker. Use the facility activation workflow to pay the fee from the designated wallet.

## Designated wallet

The designated wallet is used for borrower transactions and repayments. If the wallet changes, Qiro creates a new wallet version. Existing resources remain bound to the wallet version selected when they were created.

The partner application should compare the connected wallet account with the facility response before asking the wallet to sign. The SDK does this automatically for high-level drawdown and repayment calls.


# Drawdowns

The drawdown workflow creates a durable credit request and then prepares the borrower transaction only after Qiro validation succeeds.

## High-level SDK

Use [`requestDrawdown(...)`](/developer-section/qiro-instant-settlement/sdk#requestdrawdown) for the normal partner flow. The SDK guide includes a complete input example.

The SDK:

1. retrieves the facility;
2. verifies the supplied wallet is the active designated wallet;
3. creates the drawdown with an idempotency key;
4. polls until the drawdown is `READY_FOR_SUBMISSION`;
5. requests the unsigned borrower transaction;
6. verifies chain ID, LOC address, function, amount, duration, and zero native value;
7. asks the wallet to sign and broadcast;
8. waits for the receipt and verifies `DrawdownRequested`.

The SDK returns after `DrawdownRequested` is confirmed. That does not mean the drawdown is funded. Qiro admin approval and funding happen asynchronously. Use `GET /v1/drawdowns/{drawdown_id}` and webhooks for the later status.

## REST workflow

```http
POST /v1/facilities/{facility_id}/drawdowns
GET  /v1/drawdowns/{drawdown_id}
POST /v1/drawdowns/{drawdown_id}/prepare
GET  /v1/drawdowns/{drawdown_id}
```

Creation returns `202 VALIDATING`. Qiro then validates facility policy, available credit, tenor, wallet, contract state, and simulation. When the resource becomes `READY_FOR_SUBMISSION`, preparation returns short-lived unsigned `requestDrawdown(amount, duration)` calldata.

Repeated preparation during the validity window returns the same stored transaction. After expiry, Qiro prepares a fresh transaction only if contract state is still safe.

## Cancellation

Drawdown cancellation is not enabled in the current partner API. If a drawdown has not been prepared yet, coordinate cancellation operationally with Qiro. Once transaction preparation begins, the borrower transaction may already have been broadcast.

## Main statuses

```
VALIDATING
READY_FOR_SUBMISSION
SUBMITTING
AWAITING_APPROVAL
FUNDED
REPAID
REJECTED
FAILED
```

`AWAITING_APPROVAL` means Qiro verified the borrower request on-chain. `FUNDED` means the Qiro admin approval/funding transaction was verified. `REPAID` means Qiro has verified a full repayment of the funded drawdown.


# Repayments

`repayDrawdown` fully repays one funded drawdown. The partner does not choose a partial repayment amount for this operation.

## Dues preview

```http
GET /v1/drawdowns/{drawdown_id}/dues
```

The dues endpoint is informational. It does not create a repayment, reserve a quote, approve tokens, or transfer funds. Qiro reads fresh contract-backed obligations again when repayment is created.

## High-level SDK

Use `repayDrawdown(...)` for the normal partner flow.

The SDK:

1. retrieves the drawdown and facility;
2. verifies the drawdown is `FUNDED`;
3. verifies the wallet is the facility’s active designated wallet;
4. creates a repayment resource with a generated idempotency key;
5. handles up to two token approval transactions when needed;
6. verifies and sends the repayment transaction;
7. verifies `RepaymentMade` and `DrawdownRepaid` in the receipt;
8. polls the repayment resource until `REPAID` or `FAILED`.

## Immutable operation maximum

When Qiro creates a repayment, it calculates a buffered maximum from current contract dues and stores it on the repayment resource. That maximum is fixed for the lifetime of the resource.

Every approval amount is either `0` for a token reset or exactly the fixed maximum. The repayment calldata also uses the fixed maximum. The contract consumes only what is actually owed according to its accounting.

Qiro refreshes dues before each new preparation. If current dues exceed the fixed maximum before financial calldata has been issued, Qiro fails the repayment with `REPAYMENT_QUOTE_EXPIRED`. The partner should create a fresh repayment.

## Token approval

If allowance is sufficient, creation may return a `REPAYMENT` action immediately.

If allowance is insufficient, creation returns `TOKEN_APPROVAL`. Some tokens require resetting a non-zero allowance to zero before setting a new allowance. The SDK supports this bounded path:

```
TOKEN_APPROVAL amount 0
TOKEN_APPROVAL amount fixed maximum
REPAYMENT amount fixed maximum
```

The SDK stops if the API ever asks for more than two approval transactions.

## Main statuses

```
READY_FOR_SUBMISSION
SUBMITTING
CONFIRMING
REPAID
FAILED
```

Status endpoints remain authoritative if a receipt wait times out or a webhook is missed.


# Facility closures

`repayAndCloseFacility` atomically repays every outstanding facility obligation and closes the LOC. The partner does not choose a closure amount, drawdown list, wallet, chain, contract, token, or allocation.

## High-level SDK

Use `repayAndCloseFacility(...)` for the normal partner flow.

The SDK:

1. retrieves the facility;
2. verifies the wallet is the facility’s active designated wallet;
3. creates a closure resource with a generated idempotency key;
4. handles up to two token approval transactions when needed;
5. verifies and sends the `repayDrawdownsAndClose` transaction;
6. verifies `RepaymentMade`, expected `DrawdownRepaid` events, and `LOCClosed` in the receipt;
7. polls the closure resource until `CLOSED` or `FAILED`.

## REST workflow

```http
GET  /v1/facilities/{facility_id}/closure-dues
POST /v1/facilities/{facility_id}/closures
GET  /v1/facility-closures/{closure_id}
POST /v1/facility-closures/{closure_id}/prepare
```

The dues preview is informational. Creation reads fresh obligations, creates the closure resource, blocks new drawdown requests, and returns the first unsigned action.

If the first action is `TOKEN_APPROVAL`, the partner signs and confirms the approval, then calls `prepare` for the next action. If allowance is already sufficient, creation can return the financial closure action directly.

The financial transaction repays all obligations and closes the LOC. Qiro marks the facility closed only after the required repayment and `LOCClosed` evidence is verified.

## Token approval

If allowance is sufficient, creation may return a `FACILITY_CLOSURE` action immediately.

If allowance is insufficient, creation returns `TOKEN_APPROVAL`. Some tokens require resetting a non-zero allowance to zero before setting a new allowance. The SDK supports this bounded path:

```
TOKEN_APPROVAL amount 0
TOKEN_APPROVAL amount fixed maximum
FACILITY_CLOSURE amount fixed maximum
```

The SDK stops if the API ever asks for more than two approval transactions.

## Main statuses

```
READY_FOR_SUBMISSION
SUBMITTING
CONFIRMING
CLOSED
FAILED
```

Do not treat a transaction hash alone as closure. The status endpoint is authoritative.


# Facility activation

Use `activateFacility(...)` for an imported LOC that is pending its processing fee. The SDK creates a durable activation, handles bounded token approvals if needed, signs `payProcessingFee()`, verifies the receipt events, and polls Qiro until the activation is reconciled.

REST callers use one unsigned action at a time:

```
POST /v1/facilities/{facility_id}/activations
GET  /v1/facility-activations/{activation_id}
POST /v1/facility-activations/{activation_id}/prepare
POST /v1/facility-activations/{activation_id}/submission
```

Creation accepts no body, requires `X-Idempotency-Key`, and treats `X-Correlation-ID` as optional. Qiro reads the exact processing fee from the trusted Viewer at a pinned block. The partner cannot supply fee, wallet, token, chain, LOC address, or spender.

The submission endpoint accepts only:

```json
{ "transaction_hash": "0x..." }
```

It requires `activations:write`, is partner-isolated, persists the hash durably, treats same-hash retries as idempotent, and returns `409 ACTIVATION_TRANSACTION_CONFLICT` for a different hash. The high-level SDK calls this endpoint internally after wallet broadcast; Settle applications using `activateFacility()` must not call it manually.

Lifecycle:

```
READY_FOR_SUBMISSION → SUBMITTING → CONFIRMING → ACTIVATED
```

`FAILED` is terminal. Token approval does not move the resource out of `READY_FOR_SUBMISSION`.

More precisely, `FACILITY_ACTIVATION` preparation still leaves the resource `READY_FOR_SUBMISSION`. `SUBMITTING` starts only after the broadcast hash is submitted. `CONFIRMING` is reached only after Qiro has a confirmed successful receipt whose sender, target, calldata, and fee events match the stored preparation. `ACTIVATED` is final only after Qiro verifies final LOC state and trusted bindings through RPC.

`GET /v1/facilities/{facility_id}` returns `PENDING_ACTIVATION` while the trusted LOC is `PendingProcessingFee`. Drawdowns remain ineligible with `FACILITY_NOT_ACTIVE` until activation is reconciled.


# SDK

Install the current package from the release channel supplied during onboarding. Before npm publication, Qiro supplies a versioned tarball and SHA-256 checksum:

```sh
shasum -a 256 -c qiro-rloc-sdk-0.2.0.sha256
pnpm add ./qiro-rloc-sdk-0.2.0.tgz viem
```

Do not install an older `0.1.0` pilot tarball; it predates the facility activation workflow.

```ts
import { createQiroClient } from "@qiro/rloc-sdk";

const qiro = createQiroClient({
  apiBaseUrl: process.env.QIRO_API_BASE_URL!,
  accessToken,
  publicClient
});
```

Use an injected wallet client controlled by the partner. Do not place wallet private keys in application source code or documentation.

## `requestDrawdown`

```ts
const result = await qiro.requestDrawdown({
  facilityId: process.env.QIRO_FACILITY_ID!,
  idempotencyKey: crypto.randomUUID(),
  walletClient,
  client_id: "partner-client-id",
  client_name: "Partner borrower name",
  amount: "500000.00",
  settlement_asset: "USDC",
  use_case: "REMITTANCE_PREFUNDING",
  business_transaction: {
    type: "PAYOUT_BATCH",
    industry_type: "REMITTANCE_AND_MONEY_TRANSFER",
    settle_transaction_id: "partner-transaction-id",
    destination_currency: "PHP",
    destination_country: "PH"
  },
  requested_tenor_days: 3,
  correlation_id: "cor_partner_trace"
});
```

Returns the `drawdownId`, transaction hash, receipt, and verified `DrawdownRequested` event. It does not wait for Qiro admin approval or final funding.

Important failures include `INVALID_INPUT`, `UNAUTHORIZED`, `WALLET_MISMATCH`, `CHAIN_MISMATCH`, `WALLET_SEND_FAILED`, `RECEIPT_WAIT_FAILED`, `REVERTED_RECEIPT`, and `DRAWDOWN_EVENT_MISMATCH`.

## `repayDrawdown`

```ts
const result = await qiro.repayDrawdown({
  drawdownId: "drw_example",
  walletClient,
  readinessTimeoutMs: 30_000,
  pollIntervalMs: 500
});
```

Returns the `repaymentId`, repayment transaction hash, receipt, and final repayment resource after Qiro reports `REPAID`.

Under the hood, the SDK creates the repayment resource, handles bounded token approvals, verifies repayment calldata, sends the financial transaction, checks repayment events in the receipt, and polls the repayment status.

Important failures include `DRAWDOWN_NOT_FUNDED`, `APPROVAL_LOOP_EXCEEDED`, `REPAYMENT_EVENT_MISMATCH`, `REPAYMENT_RECONCILIATION_TIMEOUT`, and `REPAYMENT_QUOTE_EXPIRED`. Errors thrown after repayment creation include the repayment ID, and transaction-related errors include the transaction hash when available.

## `repayAndCloseFacility`

```ts
const result = await qiro.repayAndCloseFacility({
  facilityId: "fac_example",
  walletClient,
  readinessTimeoutMs: 30_000,
  pollIntervalMs: 500
});
```

Returns the `closureId`, repay-and-close transaction hash, receipt, and final closure resource after Qiro reports `CLOSED`.

Under the hood, the SDK creates the closure resource, handles bounded token approvals, verifies `repayDrawdownsAndClose` calldata, sends the financial transaction, checks `RepaymentMade`, expected `DrawdownRepaid` events, and `LOCClosed` in the receipt, and polls closure status.

You do not need to call `repayDrawdown` first for funded active drawdowns. This method repays all known active funded drawdowns plus facility-level dues and closes the LOC in one transaction. It does not run while a drawdown request or repayment is still in-flight.

Important failures include `FACILITY_ALREADY_CLOSED`, `APPROVAL_LOOP_EXCEEDED`, `FACILITY_CLOSURE_EVENT_MISMATCH`, `FACILITY_CLOSURE_RECONCILIATION_TIMEOUT`, and `CLOSURE_QUOTE_EXPIRED`. Errors thrown after closure creation include the closure ID, and transaction-related errors include the transaction hash when available.

## `activateFacility`

```ts
const result = await qiro.activateFacility({
  facilityId: "fac_example",
  walletClient,
  readinessTimeoutMs: 30_000,
  pollIntervalMs: 500
});
```

Returns the `activationId`, activation transaction hash, receipt, and final activation resource after Qiro reports `ACTIVATED`.

The SDK does not require a prior facility read. The activation creation response supplies the trusted chain, LOC, token, fee, and designated wallet. The SDK verifies bounded `approve(loc, 0 | exactFee)` actions and the final `payProcessingFee()` calldata before asking the wallet to sign.

After the wallet broadcasts `payProcessingFee()`, the SDK automatically submits the transaction hash to Qiro and then polls until the activation reaches `ACTIVATED` or `FAILED`. Settle applications should not call `POST /v1/facility-activations/{activation_id}/submission` separately when using `activateFacility()`. If anything becomes uncertain after broadcast, SDK errors include both `activationId` and `transactionHash` when available.

## Read helpers

The current SDK also exposes:

* `getFacility`
* `getDrawdown`
* `getRepayment`
* `getFacilityClosure`
* `getFacilityActivation`
* `getLoc`
* `getDues`
* `listDrawdowns`
* `listRepayments`
* `listActivity`
* `requestDrawdownByLoc`

`requestDrawdownByLoc` is a low-level diagnostic flow. Partner integrations should use facility IDs and `requestDrawdown`.

The current SDK package does not export a high-level `recordRecovery` method.


# Webhooks

Qiro sends signed webhooks for partner-relevant lifecycle changes. Webhooks are notifications; status endpoints remain authoritative.

## Delivery model

* Delivery is at least once.
* Retries keep the same `event_id`.
* The receiver must deduplicate by `event_id`.
* Use `resource_version` to order updates for the same resource.
* Do not assume global ordering across resources.
* Return `2xx` only after durable receipt.

## Signature verification

Qiro signs the exact raw request body with a shared webhook secret and timestamp.

Receiver requirements:

1. Capture the raw request body bytes before JSON parsing.
2. Read the timestamp and signature headers defined in the OpenAPI specification.
3. Reject stale timestamps according to the configured tolerance.
4. Recompute the HMAC over `timestamp.rawBody`.
5. Compare the expected and received signatures using a timing-safe comparison.
6. Parse JSON only after signature verification succeeds.

Do not verify a re-serialized JSON object. Whitespace and field order matter because the signature covers the raw body.

## Reconciliation

If a webhook is missed, duplicated, or delayed, call the relevant status endpoint:

* `GET /v1/drawdowns/{drawdown_id}`
* `GET /v1/repayments/{repayment_id}`
* `GET /v1/facility-closures/{closure_id}`
* `GET /v1/facility-activations/{activation_id}`

Webhook payloads include the resource type, resource ID, facility ID, status, correlation ID, resource version, and blockchain evidence when relevant.

Current webhook resources are drawdowns, repayments, facility closures, and facility activations. Recovery webhooks are a future workflow and are not emitted by the current API.


# Errors and idempotency

Qiro returns stable error codes in a standard envelope. Use the code and `retryable` flag to decide what to do next.

## What to do next

| Situation                         | Examples                                                               | Partner action                                                                                                                   |
| --------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| Authentication failed             | `UNAUTHORIZED`, missing scope                                          | Refresh credentials or request the required scope.                                                                               |
| Resource is not visible           | `404`                                                                  | Check the ID and authenticated partner; cross-partner resources are intentionally indistinguishable.                             |
| Duplicate safety conflict         | `IDEMPOTENCY_CONFLICT`                                                 | Stop and inspect the original operation. Do not retry with changed payload under the same key.                                   |
| Resource not in the right state   | `DRAWDOWN_NOT_READY`, `REPAYMENT_NOT_READY`, `DRAWDOWN_NOT_FUNDED`     | Read the status endpoint and continue from the current state.                                                                    |
| Business or facility rejection    | `INSUFFICIENT_AVAILABLE_LIMIT`, `INVALID_TENOR`, `FACILITY_NOT_ACTIVE` | Correct the request or resolve the facility condition before retrying.                                                           |
| Wallet or chain mismatch          | `WALLET_MISMATCH`, `CHAIN_MISMATCH`                                    | Connect the active designated wallet on the facility chain.                                                                      |
| Temporary infrastructure failure  | `RLOC_SERVICE_UNAVAILABLE`                                             | Retry safely with the same idempotency key where the endpoint requires one.                                                      |
| Repayment quote expired           | `REPAYMENT_QUOTE_EXPIRED`                                              | Create a fresh repayment so Qiro can calculate a new fixed maximum.                                                              |
| Receipt uncertain after broadcast | `RECEIPT_WAIT_FAILED`, reconciliation timeout                          | Do not submit another financial transaction automatically. Query the status endpoint using the resource ID and transaction hash. |

## Idempotency keys

Money-sensitive creation endpoints require `X-Idempotency-Key`.

The same key and same request return the original resource. The same key with a different request returns `IDEMPOTENCY_CONFLICT`.

Idempotency keys prevent accidental duplicate resource creation. They are not credentials and are separate from correlation IDs.

SDK methods generate and reuse idempotency keys internally where they own the workflow. Direct REST integrations should generate a new UUID per logical operation and persist it with the partner’s local operation record.

## Correlation IDs

Correlation IDs are for tracing. They can appear in API responses and webhooks. Reusing or changing a correlation ID does not bypass idempotency, authorization, wallet checks, or contract validation.

## Safe retry rules

* Retry read requests freely.
* Retry creation requests with the same idempotency key after transport failure.
* Retry preparation requests when no transaction was signed or when instructed by the current status.
* After a wallet returns a transaction hash, do not blindly resubmit. Read the resource status and reconcile the known transaction hash.


# OpenAPI Spec


# Authentication

Partner authentication using OAuth 2.0 client credentials.


# Obtain an access token

Authenticate using HTTP Basic with the Qiro-issued client ID and client secret. Access tokens are short-lived and must not be sent to the SDK as a long-lived secret.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Authentication","description":"Partner authentication using OAuth 2.0 client credentials."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"clientCredentialsBasic":[]}],"components":{"securitySchemes":{"clientCredentialsBasic":{"type":"http","scheme":"basic","description":"Qiro-issued OAuth client ID and client secret."}},"schemas":{"OAuthTokenResponse":{"type":"object","additionalProperties":false,"required":["access_token","token_type","expires_in","scope"],"properties":{"access_token":{"type":"string","minLength":1},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer","const":900},"scope":{"type":"string","description":"Space-delimited scopes granted to the OAuth client; grants may be narrower than the complete API surface."}}},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"InvalidClient":{"description":"Client credentials are missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/oauth/token":{"post":{"tags":["Authentication"],"operationId":"createOAuthToken","summary":"Obtain an access token","description":"Authenticate using HTTP Basic with the Qiro-issued client ID and client secret.\nAccess tokens are short-lived and must not be sent to the SDK as a long-lived secret.\n","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","additionalProperties":false,"required":["grant_type"],"properties":{"grant_type":{"type":"string","const":"client_credentials"}}}}}},"responses":{"200":{"description":"A short-lived partner access token.","headers":{"Cache-Control":{"schema":{"type":"string","const":"no-store"}},"Pragma":{"schema":{"type":"string","const":"no-cache"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/InvalidClient"}}}}}}
```


# Facilities

Read Qiro-approved facility identity, balances, policy, and designated wallet.


# Retrieve an approved facility

Returns partner-scoped facility identity and a current contract-backed snapshot. `drawdown_eligibility` reports facility-level blockers; request-specific amount, corridor, and tenor checks still run when a drawdown is created.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Facilities","description":"Read Qiro-approved facility identity, balances, policy, and designated wallet."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["facilities:read"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"FacilityId":{"name":"facility_id","in":"path","required":true,"description":"Stable Qiro identifier for one approved LOC facility.","schema":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"}},"CorrelationId":{"name":"X-Correlation-ID","in":"header","required":true,"description":"End-to-end request identifier. When the body contains `correlation_id`, both values must match.","schema":{"type":"string","minLength":1,"maxLength":128}}},"headers":{"CorrelationId":{"description":"Echo of the request correlation identifier.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"Facility":{"type":"object","additionalProperties":false,"required":["facility_id","loc_address","client_id","client_name","client_type","status","currency","approved_limit","utilized_amount","available_amount","supported_settlement_assets","maximum_tenor_days","drawdown_eligibility","designated_wallet","resource_version","updated_at"],"properties":{"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"client_id":{"type":"string","description":"The partner's immutable identifier for the borrower."},"client_name":{"type":"string","description":"Qiro's authoritative stored borrower display name."},"client_type":{"type":"string","enum":["REMITTANCE_COMPANY"]},"status":{"$ref":"#/components/schemas/FacilityStatus"},"currency":{"type":"string","enum":["USDC","USDT"]},"approved_limit":{"$ref":"#/components/schemas/MoneyString"},"utilized_amount":{"$ref":"#/components/schemas/MoneyString"},"available_amount":{"$ref":"#/components/schemas/MoneyString"},"supported_settlement_assets":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"string","enum":["USDC","USDT"]}},"maximum_tenor_days":{"type":"integer","minimum":0},"drawdown_eligibility":{"$ref":"#/components/schemas/DrawdownEligibility"},"designated_wallet":{"$ref":"#/components/schemas/DesignatedWallet"},"resource_version":{"type":"integer","minimum":1},"updated_at":{"type":"string","format":"date-time"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"FacilityStatus":{"type":"string","enum":["ACTIVE","SUSPENDED","DEFAULTED","RECOVERY_IN_PROGRESS","CLOSURE_REQUESTED","CLOSED","EXPIRED"]},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"DrawdownEligibility":{"type":"object","additionalProperties":false,"required":["eligible","reasons"],"properties":{"eligible":{"type":"boolean"},"reasons":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["FACILITY_NOT_ACTIVE","DESIGNATED_WALLET_NOT_ACTIVE","DESIGNATED_WALLET_NOT_VERIFIED","FACILITY_STATE_MISMATCH","ACTIVE_DRAWDOWN_CONFLICT","FACILITY_PAYMENT_OVERDUE"]}}}},"DesignatedWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version","address","chain_id","purpose","status"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1},"address":{"$ref":"#/components/schemas/EvmAddress"},"chain_id":{"type":"integer","minimum":1},"purpose":{"type":"string","const":"BORROWING_AND_REPAYMENT"},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]}}},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"FacilityNotFound":{"description":"The facility was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceConflict":{"description":"Idempotency, workflow state, or verified facility identity conflicts with the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServiceUnavailable":{"description":"Contract, RPC, subgraph, or reconciliation infrastructure is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/facilities/{facility_id}":{"get":{"tags":["Facilities"],"operationId":"getFacility","summary":"Retrieve an approved facility","description":"Returns partner-scoped facility identity and a current contract-backed snapshot.\n`drawdown_eligibility` reports facility-level blockers; request-specific amount,\ncorridor, and tenor checks still run when a drawdown is created.\n","parameters":[{"$ref":"#/components/parameters/FacilityId"},{"$ref":"#/components/parameters/CorrelationId"}],"responses":{"200":{"description":"The facility and its currently designated wallet.","headers":{"X-Correlation-ID":{"$ref":"#/components/headers/CorrelationId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Facility"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/FacilityNotFound"},"409":{"$ref":"#/components/responses/ResourceConflict"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```


# Drawdowns

Request, prepare, and track a drawdown against an approved facility.


# Request a drawdown

Creates a durable drawdown resource and starts asynchronous eligibility validation. A `202` response does not mean the drawdown is approved or funded.

The high-level SDK continues by polling this resource, preparing the transaction, asking the partner's wallet to sign and broadcast, and verifying the confirmed request event. The SDK returns after borrower-request confirmation; admin approval and funding remain asynchronous.

The authenticated partner, facility ID, and idempotency key identify the operation. Repeating the same key with the same request returns the original resource. Reusing the key with a different request returns `IDEMPOTENCY_CONFLICT`.

The partner must not send a wallet, chain, contract, rate, fee, or limit. Qiro resolves those values from the approved facility.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Drawdowns","description":"Request, prepare, and track a drawdown against an approved facility."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["drawdowns:write"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"FacilityId":{"name":"facility_id","in":"path","required":true,"description":"Stable Qiro identifier for one approved LOC facility.","schema":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"}},"CorrelationId":{"name":"X-Correlation-ID","in":"header","required":true,"description":"End-to-end request identifier. When the body contains `correlation_id`, both values must match.","schema":{"type":"string","minLength":1,"maxLength":128}},"IdempotencyKey":{"name":"X-Idempotency-Key","in":"header","required":true,"description":"UUID protecting a money-sensitive operation from duplicate execution. Qiro SDK methods generate and reuse it automatically.","schema":{"type":"string","format":"uuid"}}},"schemas":{"CreateDrawdownRequest":{"type":"object","additionalProperties":false,"required":["client_id","client_name","amount","settlement_asset","use_case","business_transaction","requested_tenor_days","correlation_id"],"properties":{"client_id":{"type":"string","minLength":1,"maxLength":128},"client_name":{"type":"string","minLength":1,"maxLength":256,"description":"Descriptive only; Qiro's stored borrower name remains authoritative."},"amount":{"allOf":[{"$ref":"#/components/schemas/PositiveMoneyString"}],"description":"Positive display-unit amount using the configured token precision."},"settlement_asset":{"type":"string","enum":["USDC","USDT"]},"use_case":{"$ref":"#/components/schemas/DrawdownUseCase"},"business_transaction":{"$ref":"#/components/schemas/BusinessTransaction"},"requested_tenor_days":{"type":"integer","minimum":1},"correlation_id":{"type":"string","minLength":1,"maxLength":128}}},"PositiveMoneyString":{"type":"string","pattern":"^(?:0\\.(?:0*\\d*[1-9]\\d*)|[1-9]\\d*(?:\\.\\d+)?)$","description":"Positive decimal display-unit amount. JSON numbers are not accepted."},"DrawdownUseCase":{"type":"string","enum":["REMITTANCE_PREFUNDING","PAYOUT_BATCH_PREFUNDING","CORRIDOR_LIQUIDITY"]},"BusinessTransaction":{"type":"object","additionalProperties":false,"required":["type","industry_type","settle_transaction_id","destination_currency","destination_country"],"properties":{"type":{"type":"string","enum":["SINGLE_REMITTANCE","PAYOUT_BATCH","CORRIDOR_FUNDING","FX_TRADE","TREASURY_TRANSFER"]},"industry_type":{"type":"string","enum":["REMITTANCE_AND_MONEY_TRANSFER","CROSS_BORDER_PAYMENTS","B2B_PAYMENTS","SUPPLIER_PAYMENTS","PAYROLL","MARKETPLACE_PAYOUTS","MERCHANT_SETTLEMENT","E_COMMERCE","TRAVEL","EDUCATION","HEALTHCARE","FINANCIAL_SERVICES","PROFESSIONAL_SERVICES","LOGISTICS","OTHER"]},"settle_transaction_id":{"type":"string","minLength":1,"maxLength":128},"external_reference":{"type":"string","minLength":1,"maxLength":128},"source_currency":{"$ref":"#/components/schemas/CurrencyCode"},"source_country":{"$ref":"#/components/schemas/CountryCode"},"destination_currency":{"$ref":"#/components/schemas/CurrencyCode"},"destination_country":{"$ref":"#/components/schemas/CountryCode"}}},"CurrencyCode":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code."},"CountryCode":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code."},"Drawdown":{"type":"object","additionalProperties":false,"required":["drawdown_id","facility_id","client","status","amount","amount_base_units","settlement_asset","use_case","business_transaction","designated_wallet","requested_tenor_days","duration_seconds","correlation_id","rejection","failure","blockchain_evidence","funded_drawdown_id","created_at","updated_at","resource_version"],"properties":{"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"client":{"$ref":"#/components/schemas/Client"},"status":{"$ref":"#/components/schemas/DrawdownStatus"},"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"settlement_asset":{"type":"string","enum":["USDC","USDT"]},"use_case":{"$ref":"#/components/schemas/DrawdownUseCase"},"business_transaction":{"$ref":"#/components/schemas/BusinessTransaction"},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"requested_tenor_days":{"type":"integer","minimum":1},"duration_seconds":{"$ref":"#/components/schemas/UnsignedIntegerString"},"correlation_id":{"type":"string","minLength":1,"maxLength":128},"rejection":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/DrawdownChainEvidence"}},"funded_drawdown_id":{"oneOf":[{"$ref":"#/components/schemas/UnsignedIntegerString"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"Client":{"type":"object","additionalProperties":false,"required":["client_id","client_name","client_type"],"properties":{"client_id":{"type":"string","minLength":1},"client_name":{"type":"string","minLength":1},"client_type":{"type":"string","const":"REMITTANCE_COMPANY"}}},"DrawdownStatus":{"type":"string","description":"Current normalized partner workflow state.","enum":["VALIDATING","READY_FOR_SUBMISSION","SUBMITTING","AWAITING_APPROVAL","FUNDED","REPAID","REJECTED","FAILED"]},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"DrawdownChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["DrawdownRequested","DrawdownApproved","DrawdownRejected"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"headers":{"CorrelationId":{"description":"Echo of the request correlation identifier.","schema":{"type":"string","minLength":1,"maxLength":128}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"FacilityNotFound":{"description":"The facility was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceConflict":{"description":"Idempotency, workflow state, or verified facility identity conflicts with the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"EligibilityRejected":{"description":"The request is valid but rejected by facility, policy, liquidity, or contract rules.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServiceUnavailable":{"description":"Contract, RPC, subgraph, or reconciliation infrastructure is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/facilities/{facility_id}/drawdowns":{"post":{"tags":["Drawdowns"],"operationId":"createDrawdown","summary":"Request a drawdown","description":"Creates a durable drawdown resource and starts asynchronous eligibility validation.\nA `202` response does not mean the drawdown is approved or funded.\n\nThe high-level SDK continues by polling this resource, preparing the transaction, asking\nthe partner's wallet to sign and broadcast, and verifying the confirmed request event. The SDK\nreturns after borrower-request confirmation; admin approval and funding remain asynchronous.\n\nThe authenticated partner, facility ID, and idempotency key identify the operation.\nRepeating the same key with the same request returns the original resource. Reusing\nthe key with a different request returns `IDEMPOTENCY_CONFLICT`.\n\nThe partner must not send a wallet, chain, contract, rate, fee, or limit. Qiro resolves\nthose values from the approved facility.\n","parameters":[{"$ref":"#/components/parameters/FacilityId"},{"$ref":"#/components/parameters/CorrelationId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDrawdownRequest"}}}},"responses":{"202":{"description":"Drawdown accepted for asynchronous validation.","headers":{"X-Correlation-ID":{"$ref":"#/components/headers/CorrelationId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Drawdown"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/FacilityNotFound"},"409":{"$ref":"#/components/responses/ResourceConflict"},"422":{"$ref":"#/components/responses/EligibilityRejected"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```


# Retrieve drawdown status

Returns Qiro's current normalized workflow state and verified blockchain evidence. Clients should use `resource_version` to order this response against webhooks.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Drawdowns","description":"Request, prepare, and track a drawdown against an approved facility."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["drawdowns:read"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"DrawdownId":{"name":"drawdown_id","in":"path","required":true,"description":"Stable Qiro identifier for one partner drawdown workflow.","schema":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"}},"CorrelationId":{"name":"X-Correlation-ID","in":"header","required":true,"description":"End-to-end request identifier. When the body contains `correlation_id`, both values must match.","schema":{"type":"string","minLength":1,"maxLength":128}}},"headers":{"CorrelationId":{"description":"Echo of the request correlation identifier.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"Drawdown":{"type":"object","additionalProperties":false,"required":["drawdown_id","facility_id","client","status","amount","amount_base_units","settlement_asset","use_case","business_transaction","designated_wallet","requested_tenor_days","duration_seconds","correlation_id","rejection","failure","blockchain_evidence","funded_drawdown_id","created_at","updated_at","resource_version"],"properties":{"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"client":{"$ref":"#/components/schemas/Client"},"status":{"$ref":"#/components/schemas/DrawdownStatus"},"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"settlement_asset":{"type":"string","enum":["USDC","USDT"]},"use_case":{"$ref":"#/components/schemas/DrawdownUseCase"},"business_transaction":{"$ref":"#/components/schemas/BusinessTransaction"},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"requested_tenor_days":{"type":"integer","minimum":1},"duration_seconds":{"$ref":"#/components/schemas/UnsignedIntegerString"},"correlation_id":{"type":"string","minLength":1,"maxLength":128},"rejection":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/DrawdownChainEvidence"}},"funded_drawdown_id":{"oneOf":[{"$ref":"#/components/schemas/UnsignedIntegerString"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"Client":{"type":"object","additionalProperties":false,"required":["client_id","client_name","client_type"],"properties":{"client_id":{"type":"string","minLength":1},"client_name":{"type":"string","minLength":1},"client_type":{"type":"string","const":"REMITTANCE_COMPANY"}}},"DrawdownStatus":{"type":"string","description":"Current normalized partner workflow state.","enum":["VALIDATING","READY_FOR_SUBMISSION","SUBMITTING","AWAITING_APPROVAL","FUNDED","REPAID","REJECTED","FAILED"]},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"DrawdownUseCase":{"type":"string","enum":["REMITTANCE_PREFUNDING","PAYOUT_BATCH_PREFUNDING","CORRIDOR_LIQUIDITY"]},"BusinessTransaction":{"type":"object","additionalProperties":false,"required":["type","industry_type","settle_transaction_id","destination_currency","destination_country"],"properties":{"type":{"type":"string","enum":["SINGLE_REMITTANCE","PAYOUT_BATCH","CORRIDOR_FUNDING","FX_TRADE","TREASURY_TRANSFER"]},"industry_type":{"type":"string","enum":["REMITTANCE_AND_MONEY_TRANSFER","CROSS_BORDER_PAYMENTS","B2B_PAYMENTS","SUPPLIER_PAYMENTS","PAYROLL","MARKETPLACE_PAYOUTS","MERCHANT_SETTLEMENT","E_COMMERCE","TRAVEL","EDUCATION","HEALTHCARE","FINANCIAL_SERVICES","PROFESSIONAL_SERVICES","LOGISTICS","OTHER"]},"settle_transaction_id":{"type":"string","minLength":1,"maxLength":128},"external_reference":{"type":"string","minLength":1,"maxLength":128},"source_currency":{"$ref":"#/components/schemas/CurrencyCode"},"source_country":{"$ref":"#/components/schemas/CountryCode"},"destination_currency":{"$ref":"#/components/schemas/CurrencyCode"},"destination_country":{"$ref":"#/components/schemas/CountryCode"}}},"CurrencyCode":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code."},"CountryCode":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code."},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"DrawdownChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["DrawdownRequested","DrawdownApproved","DrawdownRejected"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"DrawdownNotFound":{"description":"The drawdown was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/drawdowns/{drawdown_id}":{"get":{"tags":["Drawdowns"],"operationId":"getDrawdown","summary":"Retrieve drawdown status","description":"Returns Qiro's current normalized workflow state and verified blockchain evidence.\nClients should use `resource_version` to order this response against webhooks.\n","parameters":[{"$ref":"#/components/parameters/DrawdownId"},{"$ref":"#/components/parameters/CorrelationId"}],"responses":{"200":{"description":"Current drawdown workflow state.","headers":{"X-Correlation-ID":{"$ref":"#/components/headers/CorrelationId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Drawdown"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/DrawdownNotFound"}}}}}}
```


# Prepare the borrower transaction

Returns unsigned calldata only while the drawdown is `READY_FOR_SUBMISSION`, or returns the same unexpired stored preparation for an idempotent retry. Preparations are valid for ten minutes. Preparation atomically moves the resource to `SUBMITTING` because the transaction may be broadcast immediately after this response.

The partner signs and broadcasts the returned transaction using the designated wallet. Qiro never receives a private key and this endpoint does not submit a blockchain transaction. The Qiro SDK can perform preparation, wallet submission, and immediate receipt verification as one client-side method.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Drawdowns","description":"Request, prepare, and track a drawdown against an approved facility."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["drawdowns:write"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"DrawdownId":{"name":"drawdown_id","in":"path","required":true,"description":"Stable Qiro identifier for one partner drawdown workflow.","schema":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"}},"CorrelationId":{"name":"X-Correlation-ID","in":"header","required":true,"description":"End-to-end request identifier. When the body contains `correlation_id`, both values must match.","schema":{"type":"string","minLength":1,"maxLength":128}}},"headers":{"CorrelationId":{"description":"Echo of the request correlation identifier.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"DrawdownPreparation":{"type":"object","additionalProperties":false,"required":["drawdown_id","status","expires_at","transaction"],"properties":{"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"status":{"type":"string","const":"SUBMITTING"},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"DrawdownNotFound":{"description":"The drawdown was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceConflict":{"description":"Idempotency, workflow state, or verified facility identity conflicts with the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"EligibilityRejected":{"description":"The request is valid but rejected by facility, policy, liquidity, or contract rules.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServiceUnavailable":{"description":"Contract, RPC, subgraph, or reconciliation infrastructure is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/drawdowns/{drawdown_id}/prepare":{"post":{"tags":["Drawdowns"],"operationId":"prepareDrawdown","summary":"Prepare the borrower transaction","description":"Returns unsigned calldata only while the drawdown is `READY_FOR_SUBMISSION`, or returns\nthe same unexpired stored preparation for an idempotent retry. Preparations are valid for\nten minutes.\nPreparation atomically moves the resource to `SUBMITTING` because the transaction\nmay be broadcast immediately after this response.\n\nThe partner signs and broadcasts the returned transaction using the designated wallet.\nQiro never receives a private key and this endpoint does not submit a blockchain\ntransaction. The Qiro SDK can perform preparation, wallet submission, and immediate\nreceipt verification as one client-side method.\n","parameters":[{"$ref":"#/components/parameters/DrawdownId"},{"$ref":"#/components/parameters/CorrelationId"}],"responses":{"200":{"description":"A short-lived unsigned transaction bound to the approved facility and wallet.","headers":{"X-Correlation-ID":{"$ref":"#/components/headers/CorrelationId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrawdownPreparation"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/DrawdownNotFound"},"409":{"$ref":"#/components/responses/ResourceConflict"},"422":{"$ref":"#/components/responses/EligibilityRejected"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```


# Repayments

Preview, prepare, and track full repayment of one funded drawdown.


# Preview full repayment of one drawdown

Returns an optional, non-reserving payoff preview. The preview is not required to create a repayment and does not freeze the displayed amount. It includes facility-level obligations because the contract pays those before the selected drawdown. Qiro reads fresh dues again when repayment is created.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Repayments","description":"Preview, prepare, and track full repayment of one funded drawdown."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["repayments:read"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"DrawdownId":{"name":"drawdown_id","in":"path","required":true,"description":"Stable Qiro identifier for one partner drawdown workflow.","schema":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"}},"OptionalCorrelationId":{"name":"X-Correlation-ID","in":"header","required":false,"description":"Optional end-to-end request identifier. The SDK supplies one automatically; Qiro generates and echoes one when absent.","schema":{"type":"string","minLength":1,"maxLength":128}}},"headers":{"CorrelationId":{"description":"Echo of the request correlation identifier.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"RepaymentQuote":{"type":"object","additionalProperties":false,"required":["drawdown_id","facility_id","repayment_asset","funded_drawdown_id","loc_address","token_address","token_decimals","designated_wallet","facility","selected_drawdown","quoted_total","maximum_repayment","calculated_at"],"properties":{"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"funded_drawdown_id":{"$ref":"#/components/schemas/UnsignedIntegerString"},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"designated_wallet":{"$ref":"#/components/schemas/RepaymentDesignatedWallet"},"facility":{"type":"object","additionalProperties":false,"required":["interest","late_fees","total"],"properties":{"interest":{"$ref":"#/components/schemas/RepaymentMoney"},"late_fees":{"$ref":"#/components/schemas/RepaymentMoney"},"total":{"$ref":"#/components/schemas/RepaymentMoney"}},"description":"Facility-level obligations paid before the selected drawdown."},"selected_drawdown":{"type":"object","additionalProperties":false,"required":["principal","interest","late_fees","total"],"properties":{"principal":{"$ref":"#/components/schemas/RepaymentMoney"},"interest":{"$ref":"#/components/schemas/RepaymentMoney"},"late_fees":{"$ref":"#/components/schemas/RepaymentMoney"},"total":{"$ref":"#/components/schemas/RepaymentMoney"}}},"quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"maximum_repayment":{"allOf":[{"$ref":"#/components/schemas/RepaymentMoney"}],"description":"Buffered maximum encoded in the repayment transaction; the contract consumes only actual dues."},"calculated_at":{"type":"string","format":"date-time"}}},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"RepaymentDesignatedWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version","address","chain_id"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1},"address":{"$ref":"#/components/schemas/EvmAddress"},"chain_id":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"DrawdownNotFound":{"description":"The drawdown was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceConflict":{"description":"Idempotency, workflow state, or verified facility identity conflicts with the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServiceUnavailable":{"description":"Contract, RPC, subgraph, or reconciliation infrastructure is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/drawdowns/{drawdown_id}/dues":{"get":{"tags":["Repayments"],"operationId":"getDrawdownDues","summary":"Preview full repayment of one drawdown","description":"Returns an optional, non-reserving payoff preview. The preview is not required to create a\nrepayment and does not freeze the displayed amount. It includes facility-level obligations\nbecause the contract pays those before the selected drawdown. Qiro reads fresh dues again\nwhen repayment is created.\n","parameters":[{"$ref":"#/components/parameters/DrawdownId"},{"$ref":"#/components/parameters/OptionalCorrelationId"}],"responses":{"200":{"description":"Current informational full-payoff preview.","headers":{"X-Correlation-ID":{"$ref":"#/components/headers/CorrelationId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepaymentQuote"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/DrawdownNotFound"},"409":{"$ref":"#/components/responses/ResourceConflict"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```


# Create a full-drawdown repayment

Reads fresh contract-backed dues, creates one durable idempotent repayment, and returns the first unsigned action in the same response. A prior dues preview is optional. Partners do not supply `dues_id`, amount, wallet, chain, contract, or allocation. The SDK generates and reuses the idempotency key and correlation ID for callers.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Repayments","description":"Preview, prepare, and track full repayment of one funded drawdown."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["repayments:write"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"DrawdownId":{"name":"drawdown_id","in":"path","required":true,"description":"Stable Qiro identifier for one partner drawdown workflow.","schema":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"}},"OptionalCorrelationId":{"name":"X-Correlation-ID","in":"header","required":false,"description":"Optional end-to-end request identifier. The SDK supplies one automatically; Qiro generates and echoes one when absent.","schema":{"type":"string","minLength":1,"maxLength":128}},"IdempotencyKey":{"name":"X-Idempotency-Key","in":"header","required":true,"description":"UUID protecting a money-sensitive operation from duplicate execution. Qiro SDK methods generate and reuse it automatically.","schema":{"type":"string","format":"uuid"}}},"headers":{"CorrelationId":{"description":"Echo of the request correlation identifier.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"CreateRepaymentResponse":{"type":"object","additionalProperties":false,"required":["repayment","preparation"],"properties":{"repayment":{"$ref":"#/components/schemas/Repayment"},"preparation":{"$ref":"#/components/schemas/RepaymentPreparation"}}},"Repayment":{"type":"object","additionalProperties":false,"required":["repayment_id","drawdown_id","facility_id","funded_drawdown_id","status","repayment_asset","loc_address","token_address","token_decimals","designated_wallet","latest_quoted_total","latest_maximum_repayment","correlation_id","failure","verified_allocation","blockchain_evidence","created_at","updated_at","resource_version"],"properties":{"repayment_id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"funded_drawdown_id":{"$ref":"#/components/schemas/UnsignedIntegerString"},"status":{"$ref":"#/components/schemas/RepaymentStatus"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"latest_quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"latest_maximum_repayment":{"description":"Fixed operation maximum established when the repayment was created. Later preparation calls refresh current dues but do not increase this cap.","$ref":"#/components/schemas/RepaymentMoney"},"verified_allocation":{"oneOf":[{"type":"object","additionalProperties":false,"required":["total_paid_base_units","principal_paid_base_units","interest_paid_base_units","late_fees_paid_base_units"],"properties":{"total_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},{"type":"null"}]},"correlation_id":{"type":"string"},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/OperationChainEvidence"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"RepaymentStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","REPAID","FAILED"]},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"RepaymentPreparation":{"type":"object","additionalProperties":false,"required":["repayment_id","status","action","sequence","amount_base_units","maximum_repayment_base_units","expires_at","transaction"],"properties":{"repayment_id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/RepaymentStatus"},"action":{"type":"string","enum":["TOKEN_APPROVAL","REPAYMENT"]},"sequence":{"type":"integer","minimum":1},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"maximum_repayment_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"DrawdownNotFound":{"description":"The drawdown was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceConflict":{"description":"Idempotency, workflow state, or verified facility identity conflicts with the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"EligibilityRejected":{"description":"The request is valid but rejected by facility, policy, liquidity, or contract rules.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServiceUnavailable":{"description":"Contract, RPC, subgraph, or reconciliation infrastructure is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/drawdowns/{drawdown_id}/repayments":{"post":{"tags":["Repayments"],"operationId":"createRepayment","summary":"Create a full-drawdown repayment","description":"Reads fresh contract-backed dues, creates one durable idempotent repayment, and returns the\nfirst unsigned action in the same response. A prior dues preview is optional. Partners do\nnot supply `dues_id`, amount, wallet, chain, contract, or allocation. The SDK generates and\nreuses the idempotency key and correlation ID for callers.\n","parameters":[{"$ref":"#/components/parameters/DrawdownId"},{"$ref":"#/components/parameters/OptionalCorrelationId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"201":{"description":"Repayment resource and first unsigned action created.","headers":{"X-Correlation-ID":{"$ref":"#/components/headers/CorrelationId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRepaymentResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/DrawdownNotFound"},"409":{"$ref":"#/components/responses/ResourceConflict"},"422":{"$ref":"#/components/responses/EligibilityRejected"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```


# Retrieve repayment status

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Repayments","description":"Preview, prepare, and track full repayment of one funded drawdown."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["repayments:read"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"RepaymentId":{"name":"repayment_id","in":"path","required":true,"description":"Stable Qiro identifier for one drawdown repayment workflow.","schema":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"}},"OptionalCorrelationId":{"name":"X-Correlation-ID","in":"header","required":false,"description":"Optional end-to-end request identifier. The SDK supplies one automatically; Qiro generates and echoes one when absent.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"Repayment":{"type":"object","additionalProperties":false,"required":["repayment_id","drawdown_id","facility_id","funded_drawdown_id","status","repayment_asset","loc_address","token_address","token_decimals","designated_wallet","latest_quoted_total","latest_maximum_repayment","correlation_id","failure","verified_allocation","blockchain_evidence","created_at","updated_at","resource_version"],"properties":{"repayment_id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"funded_drawdown_id":{"$ref":"#/components/schemas/UnsignedIntegerString"},"status":{"$ref":"#/components/schemas/RepaymentStatus"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"latest_quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"latest_maximum_repayment":{"description":"Fixed operation maximum established when the repayment was created. Later preparation calls refresh current dues but do not increase this cap.","$ref":"#/components/schemas/RepaymentMoney"},"verified_allocation":{"oneOf":[{"type":"object","additionalProperties":false,"required":["total_paid_base_units","principal_paid_base_units","interest_paid_base_units","late_fees_paid_base_units"],"properties":{"total_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},{"type":"null"}]},"correlation_id":{"type":"string"},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/OperationChainEvidence"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"RepaymentStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","REPAID","FAILED"]},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceNotFound":{"description":"The requested workflow resource was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/repayments/{repayment_id}":{"get":{"tags":["Repayments"],"operationId":"getRepayment","summary":"Retrieve repayment status","parameters":[{"$ref":"#/components/parameters/RepaymentId"},{"$ref":"#/components/parameters/OptionalCorrelationId"}],"responses":{"200":{"description":"Current repayment state and verified evidence.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Repayment"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/ResourceNotFound"}}}}}}
```


# Prepare the next repayment transaction

Refreshes current dues and returns the next unsigned transaction. This endpoint is normally called by the SDK after a `TOKEN_APPROVAL` transaction confirms, or to retry an expired preparation. Approval and `REPAYMENT` amounts use the fixed maximum established when the repayment resource was created. If fresh dues exceed that fixed maximum, Qiro fails the repayment with `REPAYMENT_QUOTE_EXPIRED` and the partner must create a fresh repayment.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Repayments","description":"Preview, prepare, and track full repayment of one funded drawdown."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["repayments:write"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"RepaymentId":{"name":"repayment_id","in":"path","required":true,"description":"Stable Qiro identifier for one drawdown repayment workflow.","schema":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"}},"OptionalCorrelationId":{"name":"X-Correlation-ID","in":"header","required":false,"description":"Optional end-to-end request identifier. The SDK supplies one automatically; Qiro generates and echoes one when absent.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"RepaymentPreparation":{"type":"object","additionalProperties":false,"required":["repayment_id","status","action","sequence","amount_base_units","maximum_repayment_base_units","expires_at","transaction"],"properties":{"repayment_id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/RepaymentStatus"},"action":{"type":"string","enum":["TOKEN_APPROVAL","REPAYMENT"]},"sequence":{"type":"integer","minimum":1},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"maximum_repayment_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"RepaymentStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","REPAID","FAILED"]},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceNotFound":{"description":"The requested workflow resource was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceConflict":{"description":"Idempotency, workflow state, or verified facility identity conflicts with the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"EligibilityRejected":{"description":"The request is valid but rejected by facility, policy, liquidity, or contract rules.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServiceUnavailable":{"description":"Contract, RPC, subgraph, or reconciliation infrastructure is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/repayments/{repayment_id}/prepare":{"post":{"tags":["Repayments"],"operationId":"prepareRepayment","summary":"Prepare the next repayment transaction","description":"Refreshes current dues and returns the next unsigned transaction. This endpoint is normally\ncalled by the SDK after a `TOKEN_APPROVAL` transaction confirms, or to retry an expired\npreparation. Approval and `REPAYMENT` amounts use the fixed maximum established when the\nrepayment resource was created. If fresh dues exceed that fixed maximum, Qiro fails the\nrepayment with `REPAYMENT_QUOTE_EXPIRED` and the partner must create a fresh repayment.\n","parameters":[{"$ref":"#/components/parameters/RepaymentId"},{"$ref":"#/components/parameters/OptionalCorrelationId"}],"responses":{"200":{"description":"Next unsigned transaction in the repayment flow.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepaymentPreparation"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/ResourceNotFound"},"409":{"$ref":"#/components/responses/ResourceConflict"},"422":{"$ref":"#/components/responses/EligibilityRejected"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```


# Facility Closures

Preview, prepare, and track full repayment and closure of a facility.


# Preview repayment and closure of a facility

Returns an optional, non-reserving preview of all facility and drawdown obligations required by `repayDrawdownsAndClose`. The preview is not required to create a closure and does not freeze the displayed amount. Qiro reads fresh obligations again when closure is created.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Facility closures","description":"Preview, prepare, and track full repayment and closure of a facility."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["closures:read"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"FacilityId":{"name":"facility_id","in":"path","required":true,"description":"Stable Qiro identifier for one approved LOC facility.","schema":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"}},"OptionalCorrelationId":{"name":"X-Correlation-ID","in":"header","required":false,"description":"Optional end-to-end request identifier. The SDK supplies one automatically; Qiro generates and echoes one when absent.","schema":{"type":"string","minLength":1,"maxLength":128}}},"headers":{"CorrelationId":{"description":"Echo of the request correlation identifier.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"FacilityClosureQuote":{"type":"object","additionalProperties":false,"required":["facility_id","repayment_asset","loc_address","token_address","token_decimals","active_drawdown_ids","outstanding_drawdown_count","designated_wallet","facility","drawdowns","quoted_total","maximum_closure","calculated_at"],"properties":{"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"active_drawdown_ids":{"type":"array","items":{"$ref":"#/components/schemas/UnsignedIntegerString"}},"outstanding_drawdown_count":{"type":"integer","minimum":0},"designated_wallet":{"$ref":"#/components/schemas/RepaymentDesignatedWallet"},"facility":{"type":"object","additionalProperties":false,"required":["interest","late_fees","total"],"properties":{"interest":{"$ref":"#/components/schemas/RepaymentMoney"},"late_fees":{"$ref":"#/components/schemas/RepaymentMoney"},"total":{"$ref":"#/components/schemas/RepaymentMoney"}}},"drawdowns":{"type":"object","additionalProperties":false,"required":["principal","interest","late_fees","total"],"properties":{"principal":{"$ref":"#/components/schemas/RepaymentMoney"},"interest":{"$ref":"#/components/schemas/RepaymentMoney"},"late_fees":{"$ref":"#/components/schemas/RepaymentMoney"},"total":{"$ref":"#/components/schemas/RepaymentMoney"}}},"quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"maximum_closure":{"$ref":"#/components/schemas/RepaymentMoney"},"calculated_at":{"type":"string","format":"date-time"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"RepaymentDesignatedWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version","address","chain_id"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1},"address":{"$ref":"#/components/schemas/EvmAddress"},"chain_id":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"FacilityNotFound":{"description":"The facility was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceConflict":{"description":"Idempotency, workflow state, or verified facility identity conflicts with the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServiceUnavailable":{"description":"Contract, RPC, subgraph, or reconciliation infrastructure is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/facilities/{facility_id}/closure-dues":{"get":{"tags":["Facility closures"],"operationId":"getFacilityClosureDues","summary":"Preview repayment and closure of a facility","description":"Returns an optional, non-reserving preview of all facility and drawdown obligations required\nby `repayDrawdownsAndClose`. The preview is not required to create a closure and does not\nfreeze the displayed amount. Qiro reads fresh obligations again when closure is created.\n","parameters":[{"$ref":"#/components/parameters/FacilityId"},{"$ref":"#/components/parameters/OptionalCorrelationId"}],"responses":{"200":{"description":"Current informational facility closure preview.","headers":{"X-Correlation-ID":{"$ref":"#/components/headers/CorrelationId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FacilityClosureQuote"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/FacilityNotFound"},"409":{"$ref":"#/components/responses/ResourceConflict"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```


# Create an atomic repay-and-close facility closure

Reads fresh contract-backed obligations, creates a durable idempotent closure, blocks new drawdowns, and returns the first unsigned action in the same response. A prior closure-dues preview is optional. Partners do not supply `closure_dues_id`, amount, wallet, chain, contract, or allocation. The eventual borrower transaction repays every outstanding drawdown and closes the LOC atomically.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Facility closures","description":"Preview, prepare, and track full repayment and closure of a facility."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["closures:write"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"FacilityId":{"name":"facility_id","in":"path","required":true,"description":"Stable Qiro identifier for one approved LOC facility.","schema":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"}},"OptionalCorrelationId":{"name":"X-Correlation-ID","in":"header","required":false,"description":"Optional end-to-end request identifier. The SDK supplies one automatically; Qiro generates and echoes one when absent.","schema":{"type":"string","minLength":1,"maxLength":128}},"IdempotencyKey":{"name":"X-Idempotency-Key","in":"header","required":true,"description":"UUID protecting a money-sensitive operation from duplicate execution. Qiro SDK methods generate and reuse it automatically.","schema":{"type":"string","format":"uuid"}}},"headers":{"CorrelationId":{"description":"Echo of the request correlation identifier.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"CreateFacilityClosureResponse":{"type":"object","additionalProperties":false,"required":["closure","preparation"],"properties":{"closure":{"$ref":"#/components/schemas/FacilityClosure"},"preparation":{"$ref":"#/components/schemas/FacilityClosurePreparation"}}},"FacilityClosure":{"type":"object","additionalProperties":false,"required":["closure_id","facility_id","status","repayment_asset","loc_address","token_address","token_decimals","active_drawdown_ids","outstanding_drawdown_count","designated_wallet","latest_quoted_total","latest_maximum_closure","correlation_id","failure","verified_allocation","blockchain_evidence","created_at","updated_at","resource_version"],"properties":{"closure_id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/FacilityClosureStatus"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"active_drawdown_ids":{"type":"array","items":{"$ref":"#/components/schemas/UnsignedIntegerString"}},"outstanding_drawdown_count":{"type":"integer","minimum":0},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"latest_quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"latest_maximum_closure":{"description":"Fixed operation maximum established when the closure was created. Later preparation calls refresh current dues but do not increase this cap.","$ref":"#/components/schemas/RepaymentMoney"},"verified_allocation":{"oneOf":[{"type":"object","additionalProperties":false,"required":["total_paid_base_units","principal_paid_base_units","interest_paid_base_units","late_fees_paid_base_units"],"properties":{"total_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},{"type":"null"}]},"correlation_id":{"type":"string"},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/OperationChainEvidence"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"FacilityClosureStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","CLOSED","FAILED"]},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"FacilityClosurePreparation":{"type":"object","additionalProperties":false,"required":["closure_id","status","action","sequence","amount_base_units","maximum_closure_base_units","expires_at","transaction"],"properties":{"closure_id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/FacilityClosureStatus"},"action":{"type":"string","enum":["TOKEN_APPROVAL","FACILITY_CLOSURE"]},"sequence":{"type":"integer","minimum":1},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"maximum_closure_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"FacilityNotFound":{"description":"The facility was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceConflict":{"description":"Idempotency, workflow state, or verified facility identity conflicts with the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"EligibilityRejected":{"description":"The request is valid but rejected by facility, policy, liquidity, or contract rules.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServiceUnavailable":{"description":"Contract, RPC, subgraph, or reconciliation infrastructure is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/facilities/{facility_id}/closures":{"post":{"tags":["Facility closures"],"operationId":"createFacilityClosure","summary":"Create an atomic repay-and-close facility closure","description":"Reads fresh contract-backed obligations, creates a durable idempotent closure, blocks new\ndrawdowns, and returns the first unsigned action in the same response. A prior closure-dues\npreview is optional. Partners do not supply `closure_dues_id`, amount, wallet, chain,\ncontract, or allocation. The eventual borrower transaction repays every outstanding\ndrawdown and closes the LOC atomically.\n","parameters":[{"$ref":"#/components/parameters/FacilityId"},{"$ref":"#/components/parameters/OptionalCorrelationId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"201":{"description":"Facility closure resource and first unsigned action created.","headers":{"X-Correlation-ID":{"$ref":"#/components/headers/CorrelationId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFacilityClosureResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/FacilityNotFound"},"409":{"$ref":"#/components/responses/ResourceConflict"},"422":{"$ref":"#/components/responses/EligibilityRejected"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```


# Retrieve facility closure status

Retrieve current facility closure state and independently verified chain evidence.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Facility closures","description":"Preview, prepare, and track full repayment and closure of a facility."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["closures:read"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"ClosureId":{"name":"closure_id","in":"path","required":true,"description":"Stable Qiro identifier for one facility closure workflow.","schema":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"}},"OptionalCorrelationId":{"name":"X-Correlation-ID","in":"header","required":false,"description":"Optional end-to-end request identifier. The SDK supplies one automatically; Qiro generates and echoes one when absent.","schema":{"type":"string","minLength":1,"maxLength":128}}},"headers":{"CorrelationId":{"description":"Echo of the request correlation identifier.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"FacilityClosure":{"type":"object","additionalProperties":false,"required":["closure_id","facility_id","status","repayment_asset","loc_address","token_address","token_decimals","active_drawdown_ids","outstanding_drawdown_count","designated_wallet","latest_quoted_total","latest_maximum_closure","correlation_id","failure","verified_allocation","blockchain_evidence","created_at","updated_at","resource_version"],"properties":{"closure_id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/FacilityClosureStatus"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"active_drawdown_ids":{"type":"array","items":{"$ref":"#/components/schemas/UnsignedIntegerString"}},"outstanding_drawdown_count":{"type":"integer","minimum":0},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"latest_quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"latest_maximum_closure":{"description":"Fixed operation maximum established when the closure was created. Later preparation calls refresh current dues but do not increase this cap.","$ref":"#/components/schemas/RepaymentMoney"},"verified_allocation":{"oneOf":[{"type":"object","additionalProperties":false,"required":["total_paid_base_units","principal_paid_base_units","interest_paid_base_units","late_fees_paid_base_units"],"properties":{"total_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},{"type":"null"}]},"correlation_id":{"type":"string"},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/OperationChainEvidence"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"FacilityClosureStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","CLOSED","FAILED"]},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceNotFound":{"description":"The requested workflow resource was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/facility-closures/{closure_id}":{"get":{"tags":["Facility closures"],"operationId":"getFacilityClosure","summary":"Retrieve facility closure status","description":"Retrieve current facility closure state and independently verified chain evidence.","parameters":[{"$ref":"#/components/parameters/ClosureId"},{"$ref":"#/components/parameters/OptionalCorrelationId"}],"responses":{"200":{"description":"Current facility closure state and verified evidence.","headers":{"X-Correlation-ID":{"$ref":"#/components/headers/CorrelationId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FacilityClosure"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/ResourceNotFound"}}}}}}
```


# Prepare the next facility closure transaction

Refreshes current obligations and returns the next unsigned transaction. Call this endpoint after a `TOKEN_APPROVAL` transaction confirms, or to retry an expired preparation. The `FACILITY_CLOSURE` action uses the fixed creation-time maximum while refreshing current obligations. The partner signs and broadcasts using the designated wallet.

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"tags":[{"name":"Facility closures","description":"Preview, prepare, and track full repayment and closure of a facility."}],"servers":[{"url":"/","description":"Qiro API host supplied to the partner during onboarding."}],"security":[{"oauth2":["closures:write"]}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"facilities:read":"Read facilities owned by the authenticated partner.","drawdowns:read":"Read partner drawdown resources.","drawdowns:write":"Create and prepare partner drawdowns.","repayments:read":"Read dues quotes and repayment resources.","repayments:write":"Create and prepare repayments.","closures:read":"Read facility closure dues and closure resources.","closures:write":"Create and prepare facility closures."}}}}},"parameters":{"ClosureId":{"name":"closure_id","in":"path","required":true,"description":"Stable Qiro identifier for one facility closure workflow.","schema":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"}},"OptionalCorrelationId":{"name":"X-Correlation-ID","in":"header","required":false,"description":"Optional end-to-end request identifier. The SDK supplies one automatically; Qiro generates and echoes one when absent.","schema":{"type":"string","minLength":1,"maxLength":128}}},"headers":{"CorrelationId":{"description":"Echo of the request correlation identifier.","schema":{"type":"string","minLength":1,"maxLength":128}}},"schemas":{"FacilityClosurePreparation":{"type":"object","additionalProperties":false,"required":["closure_id","status","action","sequence","amount_base_units","maximum_closure_base_units","expires_at","transaction"],"properties":{"closure_id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/FacilityClosureStatus"},"action":{"type":"string","enum":["TOKEN_APPROVAL","FACILITY_CLOSURE"]},"sequence":{"type":"integer","minimum":1},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"maximum_closure_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"FacilityClosureStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","CLOSED","FAILED"]},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"BadRequest":{"description":"Invalid schema, field format, or correlation identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"The bearer token is missing, invalid, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"The authenticated partner does not own the resource or lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceNotFound":{"description":"The requested workflow resource was not found for the authenticated partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ResourceConflict":{"description":"Idempotency, workflow state, or verified facility identity conflicts with the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"EligibilityRejected":{"description":"The request is valid but rejected by facility, policy, liquidity, or contract rules.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServiceUnavailable":{"description":"Contract, RPC, subgraph, or reconciliation infrastructure is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/facility-closures/{closure_id}/prepare":{"post":{"tags":["Facility closures"],"operationId":"prepareFacilityClosure","summary":"Prepare the next facility closure transaction","description":"Refreshes current obligations and returns the next unsigned transaction. Call this endpoint\nafter a `TOKEN_APPROVAL` transaction confirms, or to retry an expired preparation. The\n`FACILITY_CLOSURE` action uses the fixed creation-time maximum while refreshing current\nobligations. The partner signs and broadcasts using the designated wallet.\n","parameters":[{"$ref":"#/components/parameters/ClosureId"},{"$ref":"#/components/parameters/OptionalCorrelationId"}],"responses":{"200":{"description":"Next unsigned transaction in the facility closure flow.","headers":{"X-Correlation-ID":{"$ref":"#/components/headers/CorrelationId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FacilityClosurePreparation"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/ResourceNotFound"},"409":{"$ref":"#/components/responses/ResourceConflict"},"422":{"$ref":"#/components/responses/EligibilityRejected"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```


# Webhooks

Signed outbound lifecycle notifications delivered by Qiro to the partner.


# Receive a partner lifecycle event

Qiro sends this request to the partner's configured receiver. Delivery is at least once.
The partner must durably accept the raw body before returning \`2xx\`, verify the signature,
deduplicate by \`event\_id\`, and use \`resource\_version\` for per-resource ordering.

Signature input is \`\<X-Qiro-Timestamp>.\<rawBody>\`. The signature is the lowercase
hexadecimal HMAC-SHA256 digest prefixed with \`v1=\`.


{% openapi-webhook spec="rloc-api-v1" name="partnerLifecycle" method="post" %}
[rloc-api-v1](https://4401d86825a13bf607936cc3a9f3897a.r2.cloudflarestorage.com/gitbook-x-prod-openapi/raw/f0e1f7b07419a57cccdfb292b2f431727c60c6fb30b9f32500227d4ac9870fc9.yaml?X-Amz-Algorithm=AWS4-HMAC-SHA256\&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD\&X-Amz-Credential=dce48141f43c0191a2ad043a6888781c%2F20261026%2Fauto%2Fs3%2Faws4_request\&X-Amz-Date=20261026T150237Z\&X-Amz-Expires=172800\&X-Amz-Signature=2ef9e5663b26c917f0fd2e466540c9137bf8a2b53c651f1e04ca91d9dc7e788f\&X-Amz-SignedHeaders=host\&x-amz-checksum-mode=ENABLED\&x-id=GetObject)
{% endopenapi-webhook %}


# Models

## The OAuthTokenResponse object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"OAuthTokenResponse":{"type":"object","additionalProperties":false,"required":["access_token","token_type","expires_in","scope"],"properties":{"access_token":{"type":"string","minLength":1},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer","const":900},"scope":{"type":"string","description":"Space-delimited scopes granted to the OAuth client; grants may be narrower than the complete API surface."}}}}}}
```

## The Facility object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"Facility":{"type":"object","additionalProperties":false,"required":["facility_id","loc_address","client_id","client_name","client_type","status","currency","approved_limit","utilized_amount","available_amount","supported_settlement_assets","maximum_tenor_days","drawdown_eligibility","designated_wallet","resource_version","updated_at"],"properties":{"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"client_id":{"type":"string","description":"The partner's immutable identifier for the borrower."},"client_name":{"type":"string","description":"Qiro's authoritative stored borrower display name."},"client_type":{"type":"string","enum":["REMITTANCE_COMPANY"]},"status":{"$ref":"#/components/schemas/FacilityStatus"},"currency":{"type":"string","enum":["USDC","USDT"]},"approved_limit":{"$ref":"#/components/schemas/MoneyString"},"utilized_amount":{"$ref":"#/components/schemas/MoneyString"},"available_amount":{"$ref":"#/components/schemas/MoneyString"},"supported_settlement_assets":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"string","enum":["USDC","USDT"]}},"maximum_tenor_days":{"type":"integer","minimum":0},"drawdown_eligibility":{"$ref":"#/components/schemas/DrawdownEligibility"},"designated_wallet":{"$ref":"#/components/schemas/DesignatedWallet"},"resource_version":{"type":"integer","minimum":1},"updated_at":{"type":"string","format":"date-time"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"FacilityStatus":{"type":"string","enum":["ACTIVE","SUSPENDED","DEFAULTED","RECOVERY_IN_PROGRESS","CLOSURE_REQUESTED","CLOSED","EXPIRED"]},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"DrawdownEligibility":{"type":"object","additionalProperties":false,"required":["eligible","reasons"],"properties":{"eligible":{"type":"boolean"},"reasons":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["FACILITY_NOT_ACTIVE","DESIGNATED_WALLET_NOT_ACTIVE","DESIGNATED_WALLET_NOT_VERIFIED","FACILITY_STATE_MISMATCH","ACTIVE_DRAWDOWN_CONFLICT","FACILITY_PAYMENT_OVERDUE"]}}}},"DesignatedWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version","address","chain_id","purpose","status"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1},"address":{"$ref":"#/components/schemas/EvmAddress"},"chain_id":{"type":"integer","minimum":1},"purpose":{"type":"string","const":"BORROWING_AND_REPAYMENT"},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]}}}}}}
```

## The FacilityStatus object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"FacilityStatus":{"type":"string","enum":["ACTIVE","SUSPENDED","DEFAULTED","RECOVERY_IN_PROGRESS","CLOSURE_REQUESTED","CLOSED","EXPIRED"]}}}}
```

## The DrawdownEligibility object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"DrawdownEligibility":{"type":"object","additionalProperties":false,"required":["eligible","reasons"],"properties":{"eligible":{"type":"boolean"},"reasons":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["FACILITY_NOT_ACTIVE","DESIGNATED_WALLET_NOT_ACTIVE","DESIGNATED_WALLET_NOT_VERIFIED","FACILITY_STATE_MISMATCH","ACTIVE_DRAWDOWN_CONFLICT","FACILITY_PAYMENT_OVERDUE"]}}}}}}}
```

## The DesignatedWallet object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"DesignatedWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version","address","chain_id","purpose","status"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1},"address":{"$ref":"#/components/schemas/EvmAddress"},"chain_id":{"type":"integer","minimum":1},"purpose":{"type":"string","const":"BORROWING_AND_REPAYMENT"},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}}}
```

## The CreateDrawdownRequest object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"CreateDrawdownRequest":{"type":"object","additionalProperties":false,"required":["client_id","client_name","amount","settlement_asset","use_case","business_transaction","requested_tenor_days","correlation_id"],"properties":{"client_id":{"type":"string","minLength":1,"maxLength":128},"client_name":{"type":"string","minLength":1,"maxLength":256,"description":"Descriptive only; Qiro's stored borrower name remains authoritative."},"amount":{"allOf":[{"$ref":"#/components/schemas/PositiveMoneyString"}],"description":"Positive display-unit amount using the configured token precision."},"settlement_asset":{"type":"string","enum":["USDC","USDT"]},"use_case":{"$ref":"#/components/schemas/DrawdownUseCase"},"business_transaction":{"$ref":"#/components/schemas/BusinessTransaction"},"requested_tenor_days":{"type":"integer","minimum":1},"correlation_id":{"type":"string","minLength":1,"maxLength":128}}},"PositiveMoneyString":{"type":"string","pattern":"^(?:0\\.(?:0*\\d*[1-9]\\d*)|[1-9]\\d*(?:\\.\\d+)?)$","description":"Positive decimal display-unit amount. JSON numbers are not accepted."},"DrawdownUseCase":{"type":"string","enum":["REMITTANCE_PREFUNDING","PAYOUT_BATCH_PREFUNDING","CORRIDOR_LIQUIDITY"]},"BusinessTransaction":{"type":"object","additionalProperties":false,"required":["type","industry_type","settle_transaction_id","destination_currency","destination_country"],"properties":{"type":{"type":"string","enum":["SINGLE_REMITTANCE","PAYOUT_BATCH","CORRIDOR_FUNDING","FX_TRADE","TREASURY_TRANSFER"]},"industry_type":{"type":"string","enum":["REMITTANCE_AND_MONEY_TRANSFER","CROSS_BORDER_PAYMENTS","B2B_PAYMENTS","SUPPLIER_PAYMENTS","PAYROLL","MARKETPLACE_PAYOUTS","MERCHANT_SETTLEMENT","E_COMMERCE","TRAVEL","EDUCATION","HEALTHCARE","FINANCIAL_SERVICES","PROFESSIONAL_SERVICES","LOGISTICS","OTHER"]},"settle_transaction_id":{"type":"string","minLength":1,"maxLength":128},"external_reference":{"type":"string","minLength":1,"maxLength":128},"source_currency":{"$ref":"#/components/schemas/CurrencyCode"},"source_country":{"$ref":"#/components/schemas/CountryCode"},"destination_currency":{"$ref":"#/components/schemas/CurrencyCode"},"destination_country":{"$ref":"#/components/schemas/CountryCode"}}},"CurrencyCode":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code."},"CountryCode":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code."}}}}
```

## The CancelDrawdownRequest object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"CancelDrawdownRequest":{"type":"object","additionalProperties":false,"required":["reason_code","correlation_id"],"properties":{"reason_code":{"type":"string","enum":["UNDERLYING_TRANSACTION_CANCELLED","DUPLICATE_DRAWDOWN","INCORRECT_DETAILS","CLIENT_REQUESTED","COMPLIANCE_REVIEW","OPERATIONAL_ERROR","OTHER"]},"reason_description":{"type":"string","minLength":1,"maxLength":500},"correlation_id":{"type":"string","minLength":1,"maxLength":128}},"allOf":[{"if":{"properties":{"reason_code":{"const":"OTHER"}},"required":["reason_code"]},"then":{"properties":{"reason_description":{}},"required":["reason_description"]}}]}}}}
```

## The BusinessTransaction object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"BusinessTransaction":{"type":"object","additionalProperties":false,"required":["type","industry_type","settle_transaction_id","destination_currency","destination_country"],"properties":{"type":{"type":"string","enum":["SINGLE_REMITTANCE","PAYOUT_BATCH","CORRIDOR_FUNDING","FX_TRADE","TREASURY_TRANSFER"]},"industry_type":{"type":"string","enum":["REMITTANCE_AND_MONEY_TRANSFER","CROSS_BORDER_PAYMENTS","B2B_PAYMENTS","SUPPLIER_PAYMENTS","PAYROLL","MARKETPLACE_PAYOUTS","MERCHANT_SETTLEMENT","E_COMMERCE","TRAVEL","EDUCATION","HEALTHCARE","FINANCIAL_SERVICES","PROFESSIONAL_SERVICES","LOGISTICS","OTHER"]},"settle_transaction_id":{"type":"string","minLength":1,"maxLength":128},"external_reference":{"type":"string","minLength":1,"maxLength":128},"source_currency":{"$ref":"#/components/schemas/CurrencyCode"},"source_country":{"$ref":"#/components/schemas/CountryCode"},"destination_currency":{"$ref":"#/components/schemas/CurrencyCode"},"destination_country":{"$ref":"#/components/schemas/CountryCode"}}},"CurrencyCode":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code."},"CountryCode":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code."}}}}
```

## The DrawdownUseCase object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"DrawdownUseCase":{"type":"string","enum":["REMITTANCE_PREFUNDING","PAYOUT_BATCH_PREFUNDING","CORRIDOR_LIQUIDITY"]}}}}
```

## The Drawdown object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"Drawdown":{"type":"object","additionalProperties":false,"required":["drawdown_id","facility_id","client","status","amount","amount_base_units","settlement_asset","use_case","business_transaction","designated_wallet","requested_tenor_days","duration_seconds","correlation_id","rejection","failure","blockchain_evidence","funded_drawdown_id","created_at","updated_at","resource_version"],"properties":{"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"client":{"$ref":"#/components/schemas/Client"},"status":{"$ref":"#/components/schemas/DrawdownStatus"},"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"settlement_asset":{"type":"string","enum":["USDC","USDT"]},"use_case":{"$ref":"#/components/schemas/DrawdownUseCase"},"business_transaction":{"$ref":"#/components/schemas/BusinessTransaction"},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"requested_tenor_days":{"type":"integer","minimum":1},"duration_seconds":{"$ref":"#/components/schemas/UnsignedIntegerString"},"correlation_id":{"type":"string","minLength":1,"maxLength":128},"rejection":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/DrawdownChainEvidence"}},"funded_drawdown_id":{"oneOf":[{"$ref":"#/components/schemas/UnsignedIntegerString"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"Client":{"type":"object","additionalProperties":false,"required":["client_id","client_name","client_type"],"properties":{"client_id":{"type":"string","minLength":1},"client_name":{"type":"string","minLength":1},"client_type":{"type":"string","const":"REMITTANCE_COMPANY"}}},"DrawdownStatus":{"type":"string","description":"Current normalized partner workflow state.","enum":["VALIDATING","READY_FOR_SUBMISSION","SUBMITTING","AWAITING_APPROVAL","FUNDED","REPAID","REJECTED","FAILED"]},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"DrawdownUseCase":{"type":"string","enum":["REMITTANCE_PREFUNDING","PAYOUT_BATCH_PREFUNDING","CORRIDOR_LIQUIDITY"]},"BusinessTransaction":{"type":"object","additionalProperties":false,"required":["type","industry_type","settle_transaction_id","destination_currency","destination_country"],"properties":{"type":{"type":"string","enum":["SINGLE_REMITTANCE","PAYOUT_BATCH","CORRIDOR_FUNDING","FX_TRADE","TREASURY_TRANSFER"]},"industry_type":{"type":"string","enum":["REMITTANCE_AND_MONEY_TRANSFER","CROSS_BORDER_PAYMENTS","B2B_PAYMENTS","SUPPLIER_PAYMENTS","PAYROLL","MARKETPLACE_PAYOUTS","MERCHANT_SETTLEMENT","E_COMMERCE","TRAVEL","EDUCATION","HEALTHCARE","FINANCIAL_SERVICES","PROFESSIONAL_SERVICES","LOGISTICS","OTHER"]},"settle_transaction_id":{"type":"string","minLength":1,"maxLength":128},"external_reference":{"type":"string","minLength":1,"maxLength":128},"source_currency":{"$ref":"#/components/schemas/CurrencyCode"},"source_country":{"$ref":"#/components/schemas/CountryCode"},"destination_currency":{"$ref":"#/components/schemas/CurrencyCode"},"destination_country":{"$ref":"#/components/schemas/CountryCode"}}},"CurrencyCode":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code."},"CountryCode":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code."},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"DrawdownChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["DrawdownRequested","DrawdownApproved","DrawdownRejected"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}}}}
```

## The DrawdownStatus object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"DrawdownStatus":{"type":"string","description":"Current normalized partner workflow state.","enum":["VALIDATING","READY_FOR_SUBMISSION","SUBMITTING","AWAITING_APPROVAL","FUNDED","REPAID","REJECTED","FAILED"]}}}}
```

## The DrawdownPreparation object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"DrawdownPreparation":{"type":"object","additionalProperties":false,"required":["drawdown_id","status","expires_at","transaction"],"properties":{"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"status":{"type":"string","const":"SUBMITTING"},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The ObligationBreakdown object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"ObligationBreakdown":{"type":"object","additionalProperties":false,"required":["principal","interest","late_fees","total"],"properties":{"principal":{"$ref":"#/components/schemas/MoneyString"},"interest":{"$ref":"#/components/schemas/MoneyString"},"late_fees":{"$ref":"#/components/schemas/MoneyString"},"total":{"$ref":"#/components/schemas/MoneyString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."}}}}
```

## The RepaymentMoney object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The RepaymentQuote object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"RepaymentQuote":{"type":"object","additionalProperties":false,"required":["drawdown_id","facility_id","repayment_asset","funded_drawdown_id","loc_address","token_address","token_decimals","designated_wallet","facility","selected_drawdown","quoted_total","maximum_repayment","calculated_at"],"properties":{"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"funded_drawdown_id":{"$ref":"#/components/schemas/UnsignedIntegerString"},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"designated_wallet":{"$ref":"#/components/schemas/RepaymentDesignatedWallet"},"facility":{"type":"object","additionalProperties":false,"required":["interest","late_fees","total"],"properties":{"interest":{"$ref":"#/components/schemas/RepaymentMoney"},"late_fees":{"$ref":"#/components/schemas/RepaymentMoney"},"total":{"$ref":"#/components/schemas/RepaymentMoney"}},"description":"Facility-level obligations paid before the selected drawdown."},"selected_drawdown":{"type":"object","additionalProperties":false,"required":["principal","interest","late_fees","total"],"properties":{"principal":{"$ref":"#/components/schemas/RepaymentMoney"},"interest":{"$ref":"#/components/schemas/RepaymentMoney"},"late_fees":{"$ref":"#/components/schemas/RepaymentMoney"},"total":{"$ref":"#/components/schemas/RepaymentMoney"}}},"quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"maximum_repayment":{"allOf":[{"$ref":"#/components/schemas/RepaymentMoney"}],"description":"Buffered maximum encoded in the repayment transaction; the contract consumes only actual dues."},"calculated_at":{"type":"string","format":"date-time"}}},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"RepaymentDesignatedWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version","address","chain_id"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1},"address":{"$ref":"#/components/schemas/EvmAddress"},"chain_id":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."}}}}
```

## The Repayment object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"Repayment":{"type":"object","additionalProperties":false,"required":["repayment_id","drawdown_id","facility_id","funded_drawdown_id","status","repayment_asset","loc_address","token_address","token_decimals","designated_wallet","latest_quoted_total","latest_maximum_repayment","correlation_id","failure","verified_allocation","blockchain_evidence","created_at","updated_at","resource_version"],"properties":{"repayment_id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"funded_drawdown_id":{"$ref":"#/components/schemas/UnsignedIntegerString"},"status":{"$ref":"#/components/schemas/RepaymentStatus"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"latest_quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"latest_maximum_repayment":{"description":"Fixed operation maximum established when the repayment was created. Later preparation calls refresh current dues but do not increase this cap.","$ref":"#/components/schemas/RepaymentMoney"},"verified_allocation":{"oneOf":[{"type":"object","additionalProperties":false,"required":["total_paid_base_units","principal_paid_base_units","interest_paid_base_units","late_fees_paid_base_units"],"properties":{"total_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},{"type":"null"}]},"correlation_id":{"type":"string"},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/OperationChainEvidence"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"RepaymentStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","REPAID","FAILED"]},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}}}}
```

## The RepaymentDesignatedWallet object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"RepaymentDesignatedWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version","address","chain_id"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1},"address":{"$ref":"#/components/schemas/EvmAddress"},"chain_id":{"type":"integer","minimum":1}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}}}
```

## The RepaymentStatus object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"RepaymentStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","REPAID","FAILED"]}}}}
```

## The RepaymentPreparation object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"RepaymentPreparation":{"type":"object","additionalProperties":false,"required":["repayment_id","status","action","sequence","amount_base_units","maximum_repayment_base_units","expires_at","transaction"],"properties":{"repayment_id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/RepaymentStatus"},"action":{"type":"string","enum":["TOKEN_APPROVAL","REPAYMENT"]},"sequence":{"type":"integer","minimum":1},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"maximum_repayment_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"RepaymentStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","REPAID","FAILED"]},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}}}
```

## The CreateRepaymentResponse object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"CreateRepaymentResponse":{"type":"object","additionalProperties":false,"required":["repayment","preparation"],"properties":{"repayment":{"$ref":"#/components/schemas/Repayment"},"preparation":{"$ref":"#/components/schemas/RepaymentPreparation"}}},"Repayment":{"type":"object","additionalProperties":false,"required":["repayment_id","drawdown_id","facility_id","funded_drawdown_id","status","repayment_asset","loc_address","token_address","token_decimals","designated_wallet","latest_quoted_total","latest_maximum_repayment","correlation_id","failure","verified_allocation","blockchain_evidence","created_at","updated_at","resource_version"],"properties":{"repayment_id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"funded_drawdown_id":{"$ref":"#/components/schemas/UnsignedIntegerString"},"status":{"$ref":"#/components/schemas/RepaymentStatus"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"latest_quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"latest_maximum_repayment":{"description":"Fixed operation maximum established when the repayment was created. Later preparation calls refresh current dues but do not increase this cap.","$ref":"#/components/schemas/RepaymentMoney"},"verified_allocation":{"oneOf":[{"type":"object","additionalProperties":false,"required":["total_paid_base_units","principal_paid_base_units","interest_paid_base_units","late_fees_paid_base_units"],"properties":{"total_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},{"type":"null"}]},"correlation_id":{"type":"string"},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/OperationChainEvidence"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"RepaymentStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","REPAID","FAILED"]},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"RepaymentPreparation":{"type":"object","additionalProperties":false,"required":["repayment_id","status","action","sequence","amount_base_units","maximum_repayment_base_units","expires_at","transaction"],"properties":{"repayment_id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/RepaymentStatus"},"action":{"type":"string","enum":["TOKEN_APPROVAL","REPAYMENT"]},"sequence":{"type":"integer","minimum":1},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"maximum_repayment_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}}}}}
```

## The FacilityClosureQuote object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"FacilityClosureQuote":{"type":"object","additionalProperties":false,"required":["facility_id","repayment_asset","loc_address","token_address","token_decimals","active_drawdown_ids","outstanding_drawdown_count","designated_wallet","facility","drawdowns","quoted_total","maximum_closure","calculated_at"],"properties":{"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"active_drawdown_ids":{"type":"array","items":{"$ref":"#/components/schemas/UnsignedIntegerString"}},"outstanding_drawdown_count":{"type":"integer","minimum":0},"designated_wallet":{"$ref":"#/components/schemas/RepaymentDesignatedWallet"},"facility":{"type":"object","additionalProperties":false,"required":["interest","late_fees","total"],"properties":{"interest":{"$ref":"#/components/schemas/RepaymentMoney"},"late_fees":{"$ref":"#/components/schemas/RepaymentMoney"},"total":{"$ref":"#/components/schemas/RepaymentMoney"}}},"drawdowns":{"type":"object","additionalProperties":false,"required":["principal","interest","late_fees","total"],"properties":{"principal":{"$ref":"#/components/schemas/RepaymentMoney"},"interest":{"$ref":"#/components/schemas/RepaymentMoney"},"late_fees":{"$ref":"#/components/schemas/RepaymentMoney"},"total":{"$ref":"#/components/schemas/RepaymentMoney"}}},"quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"maximum_closure":{"$ref":"#/components/schemas/RepaymentMoney"},"calculated_at":{"type":"string","format":"date-time"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"RepaymentDesignatedWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version","address","chain_id"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1},"address":{"$ref":"#/components/schemas/EvmAddress"},"chain_id":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."}}}}
```

## The FacilityClosure object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"FacilityClosure":{"type":"object","additionalProperties":false,"required":["closure_id","facility_id","status","repayment_asset","loc_address","token_address","token_decimals","active_drawdown_ids","outstanding_drawdown_count","designated_wallet","latest_quoted_total","latest_maximum_closure","correlation_id","failure","verified_allocation","blockchain_evidence","created_at","updated_at","resource_version"],"properties":{"closure_id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/FacilityClosureStatus"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"active_drawdown_ids":{"type":"array","items":{"$ref":"#/components/schemas/UnsignedIntegerString"}},"outstanding_drawdown_count":{"type":"integer","minimum":0},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"latest_quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"latest_maximum_closure":{"description":"Fixed operation maximum established when the closure was created. Later preparation calls refresh current dues but do not increase this cap.","$ref":"#/components/schemas/RepaymentMoney"},"verified_allocation":{"oneOf":[{"type":"object","additionalProperties":false,"required":["total_paid_base_units","principal_paid_base_units","interest_paid_base_units","late_fees_paid_base_units"],"properties":{"total_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},{"type":"null"}]},"correlation_id":{"type":"string"},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/OperationChainEvidence"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"FacilityClosureStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","CLOSED","FAILED"]},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}}}}
```

## The FacilityClosureStatus object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"FacilityClosureStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","CLOSED","FAILED"]}}}}
```

## The FacilityClosurePreparation object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"FacilityClosurePreparation":{"type":"object","additionalProperties":false,"required":["closure_id","status","action","sequence","amount_base_units","maximum_closure_base_units","expires_at","transaction"],"properties":{"closure_id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/FacilityClosureStatus"},"action":{"type":"string","enum":["TOKEN_APPROVAL","FACILITY_CLOSURE"]},"sequence":{"type":"integer","minimum":1},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"maximum_closure_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"FacilityClosureStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","CLOSED","FAILED"]},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}}}
```

## The CreateFacilityClosureResponse object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"CreateFacilityClosureResponse":{"type":"object","additionalProperties":false,"required":["closure","preparation"],"properties":{"closure":{"$ref":"#/components/schemas/FacilityClosure"},"preparation":{"$ref":"#/components/schemas/FacilityClosurePreparation"}}},"FacilityClosure":{"type":"object","additionalProperties":false,"required":["closure_id","facility_id","status","repayment_asset","loc_address","token_address","token_decimals","active_drawdown_ids","outstanding_drawdown_count","designated_wallet","latest_quoted_total","latest_maximum_closure","correlation_id","failure","verified_allocation","blockchain_evidence","created_at","updated_at","resource_version"],"properties":{"closure_id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/FacilityClosureStatus"},"repayment_asset":{"type":"string","enum":["USDC","USDT"]},"loc_address":{"$ref":"#/components/schemas/EvmAddress"},"token_address":{"$ref":"#/components/schemas/EvmAddress"},"token_decimals":{"type":"integer","minimum":0,"maximum":18},"active_drawdown_ids":{"type":"array","items":{"$ref":"#/components/schemas/UnsignedIntegerString"}},"outstanding_drawdown_count":{"type":"integer","minimum":0},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"latest_quoted_total":{"$ref":"#/components/schemas/RepaymentMoney"},"latest_maximum_closure":{"description":"Fixed operation maximum established when the closure was created. Later preparation calls refresh current dues but do not increase this cap.","$ref":"#/components/schemas/RepaymentMoney"},"verified_allocation":{"oneOf":[{"type":"object","additionalProperties":false,"required":["total_paid_base_units","principal_paid_base_units","interest_paid_base_units","late_fees_paid_base_units"],"properties":{"total_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},{"type":"null"}]},"correlation_id":{"type":"string"},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/OperationChainEvidence"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"FacilityClosureStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","CLOSED","FAILED"]},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"RepaymentMoney":{"type":"object","additionalProperties":false,"required":["amount","amount_base_units"],"properties":{"amount":{"$ref":"#/components/schemas/MoneyString"},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"FacilityClosurePreparation":{"type":"object","additionalProperties":false,"required":["closure_id","status","action","sequence","amount_base_units","maximum_closure_base_units","expires_at","transaction"],"properties":{"closure_id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/FacilityClosureStatus"},"action":{"type":"string","enum":["TOKEN_APPROVAL","FACILITY_CLOSURE"]},"sequence":{"type":"integer","minimum":1},"amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"maximum_closure_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}}}}}
```

## The CreateRecoveryRequest object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"CreateRecoveryRequest":{"type":"object","additionalProperties":false,"required":["recovery_amount","recovery_reference"],"properties":{"recovery_amount":{"allOf":[{"$ref":"#/components/schemas/PositiveMoneyString"}],"description":"Partial or full facility recovery amount; it cannot exceed remaining frozen exposure."},"recovery_reference":{"type":"string","minLength":1,"maxLength":128,"description":"Partner-unique legal or operational recovery reference."}}},"PositiveMoneyString":{"type":"string","pattern":"^(?:0\\.(?:0*\\d*[1-9]\\d*)|[1-9]\\d*(?:\\.\\d+)?)$","description":"Positive decimal display-unit amount. JSON numbers are not accepted."}}}}
```

## The Recovery object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"Recovery":{"type":"object","additionalProperties":false,"required":["recovery_id","facility_id","recovery_reference","status","recovery_amount","recovery_asset","recoverable_amount_before","allocation","remaining_recoverable_amount","resulting_facility_status","designated_wallet","correlation_id","failure","blockchain_evidence","created_at","updated_at","resource_version"],"properties":{"recovery_id":{"type":"string","pattern":"^rcv_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"recovery_reference":{"type":"string"},"status":{"$ref":"#/components/schemas/RecoveryStatus"},"recovery_amount":{"$ref":"#/components/schemas/PositiveMoneyString"},"recovery_asset":{"type":"string","enum":["USDC","USDT"]},"recoverable_amount_before":{"$ref":"#/components/schemas/PositiveMoneyString"},"allocation":{"oneOf":[{"$ref":"#/components/schemas/ObligationBreakdown"},{"type":"null"}]},"remaining_recoverable_amount":{"oneOf":[{"$ref":"#/components/schemas/MoneyString"},{"type":"null"}]},"resulting_facility_status":{"oneOf":[{"type":"string","enum":["PARTIALLY_RECOVERED","RECOVERED"]},{"type":"null"}]},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"correlation_id":{"type":"string"},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/OperationChainEvidence"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"RecoveryStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","APPLIED","FAILED"]},"PositiveMoneyString":{"type":"string","pattern":"^(?:0\\.(?:0*\\d*[1-9]\\d*)|[1-9]\\d*(?:\\.\\d+)?)$","description":"Positive decimal display-unit amount. JSON numbers are not accepted."},"ObligationBreakdown":{"type":"object","additionalProperties":false,"required":["principal","interest","late_fees","total"],"properties":{"principal":{"$ref":"#/components/schemas/MoneyString"},"interest":{"$ref":"#/components/schemas/MoneyString"},"late_fees":{"$ref":"#/components/schemas/MoneyString"},"total":{"$ref":"#/components/schemas/MoneyString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The RecoveryStatus object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"RecoveryStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","APPLIED","FAILED"]}}}}
```

## The RecoveryPreparation object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"RecoveryPreparation":{"type":"object","additionalProperties":false,"required":["recovery_id","status","next_action","expires_at","transaction"],"properties":{"recovery_id":{"type":"string","pattern":"^rcv_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/RecoveryStatus"},"next_action":{"type":"string","enum":["TOKEN_APPROVAL","RECOVERY"]},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"RecoveryStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","APPLIED","FAILED"]},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The CreateRecoveryResponse object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"CreateRecoveryResponse":{"type":"object","additionalProperties":false,"required":["recovery","preparation"],"properties":{"recovery":{"$ref":"#/components/schemas/Recovery"},"preparation":{"$ref":"#/components/schemas/RecoveryPreparation"}}},"Recovery":{"type":"object","additionalProperties":false,"required":["recovery_id","facility_id","recovery_reference","status","recovery_amount","recovery_asset","recoverable_amount_before","allocation","remaining_recoverable_amount","resulting_facility_status","designated_wallet","correlation_id","failure","blockchain_evidence","created_at","updated_at","resource_version"],"properties":{"recovery_id":{"type":"string","pattern":"^rcv_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"recovery_reference":{"type":"string"},"status":{"$ref":"#/components/schemas/RecoveryStatus"},"recovery_amount":{"$ref":"#/components/schemas/PositiveMoneyString"},"recovery_asset":{"type":"string","enum":["USDC","USDT"]},"recoverable_amount_before":{"$ref":"#/components/schemas/PositiveMoneyString"},"allocation":{"oneOf":[{"$ref":"#/components/schemas/ObligationBreakdown"},{"type":"null"}]},"remaining_recoverable_amount":{"oneOf":[{"$ref":"#/components/schemas/MoneyString"},{"type":"null"}]},"resulting_facility_status":{"oneOf":[{"type":"string","enum":["PARTIALLY_RECOVERED","RECOVERED"]},{"type":"null"}]},"designated_wallet":{"$ref":"#/components/schemas/BoundWallet"},"correlation_id":{"type":"string"},"failure":{"oneOf":[{"$ref":"#/components/schemas/WorkflowReason"},{"type":"null"}]},"blockchain_evidence":{"type":"array","items":{"$ref":"#/components/schemas/OperationChainEvidence"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"resource_version":{"type":"integer","minimum":1}}},"RecoveryStatus":{"type":"string","enum":["READY_FOR_SUBMISSION","SUBMITTING","CONFIRMING","APPLIED","FAILED"]},"PositiveMoneyString":{"type":"string","pattern":"^(?:0\\.(?:0*\\d*[1-9]\\d*)|[1-9]\\d*(?:\\.\\d+)?)$","description":"Positive decimal display-unit amount. JSON numbers are not accepted."},"ObligationBreakdown":{"type":"object","additionalProperties":false,"required":["principal","interest","late_fees","total"],"properties":{"principal":{"$ref":"#/components/schemas/MoneyString"},"interest":{"$ref":"#/components/schemas/MoneyString"},"late_fees":{"$ref":"#/components/schemas/MoneyString"},"total":{"$ref":"#/components/schemas/MoneyString"}}},"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."},"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}},"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}},"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"RecoveryPreparation":{"type":"object","additionalProperties":false,"required":["recovery_id","status","next_action","expires_at","transaction"],"properties":{"recovery_id":{"type":"string","pattern":"^rcv_[A-Za-z0-9]+$"},"status":{"$ref":"#/components/schemas/RecoveryStatus"},"next_action":{"type":"string","enum":["TOKEN_APPROVAL","RECOVERY"]},"expires_at":{"type":"string","format":"date-time"},"transaction":{"$ref":"#/components/schemas/UnsignedTransaction"}}},"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}}}}}
```

## The OperationChainEvidence object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"OperationChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["RepaymentMade","DrawdownRepaid","LOCClosed","RecoveryRecorded"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"},"total_amount_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"principal_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"interest_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"},"late_fees_paid_base_units":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The UnsignedTransaction object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"UnsignedTransaction":{"type":"object","additionalProperties":false,"required":["chain_id","to","data","value"],"properties":{"chain_id":{"type":"integer","minimum":1},"to":{"$ref":"#/components/schemas/EvmAddress"},"data":{"type":"string","pattern":"^0x(?:[a-fA-F0-9]{2})*$"},"value":{"$ref":"#/components/schemas/UnsignedIntegerString"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The DrawdownChainEvidence object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"DrawdownChainEvidence":{"type":"object","additionalProperties":false,"required":["event_name","chain_id","contract_address","transaction_hash","log_index","block_number","block_hash","observed_at"],"properties":{"event_name":{"type":"string","enum":["DrawdownRequested","DrawdownApproved","DrawdownRejected"]},"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"log_index":{"type":"integer","minimum":0},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"block_hash":{"$ref":"#/components/schemas/TransactionHash"},"observed_at":{"type":"string","format":"date-time"}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The DrawdownWebhook object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"DrawdownWebhook":{"type":"object","additionalProperties":false,"required":["event_id","event_type","occurred_at","correlation_id","resource"],"properties":{"event_id":{"type":"string","pattern":"^evt_[A-Za-z0-9]+$"},"event_type":{"type":"string","enum":["drawdown.funded","drawdown.rejected","drawdown.failed"]},"occurred_at":{"type":"string","format":"date-time"},"correlation_id":{"type":"string","minLength":1,"maxLength":128},"resource":{"$ref":"#/components/schemas/DrawdownWebhookResource"},"blockchain":{"$ref":"#/components/schemas/WebhookBlockchainEvidence"}}},"DrawdownWebhookResource":{"type":"object","additionalProperties":false,"required":["type","id","facility_id","status","resource_version"],"properties":{"type":{"type":"string","const":"drawdown"},"id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"status":{"type":"string","enum":["FUNDED","REJECTED","FAILED"]},"resource_version":{"type":"integer","minimum":1}}},"WebhookBlockchainEvidence":{"type":"object","additionalProperties":false,"description":"Present for confirmed on-chain drawdown or repayment evidence and absent for off-chain validation rejection.","required":["chain_id","contract_address","transaction_hash","block_number","event_name","log_index"],"properties":{"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"event_name":{"type":"string","enum":["DrawdownApproved","DrawdownRejected","RepaymentMade","DrawdownRepaid","LOCClosed"]},"log_index":{"type":"integer","minimum":0}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The DrawdownWebhookResource object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"DrawdownWebhookResource":{"type":"object","additionalProperties":false,"required":["type","id","facility_id","status","resource_version"],"properties":{"type":{"type":"string","const":"drawdown"},"id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"status":{"type":"string","enum":["FUNDED","REJECTED","FAILED"]},"resource_version":{"type":"integer","minimum":1}}}}}}
```

## The WebhookBlockchainEvidence object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"WebhookBlockchainEvidence":{"type":"object","additionalProperties":false,"description":"Present for confirmed on-chain drawdown or repayment evidence and absent for off-chain validation rejection.","required":["chain_id","contract_address","transaction_hash","block_number","event_name","log_index"],"properties":{"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"event_name":{"type":"string","enum":["DrawdownApproved","DrawdownRejected","RepaymentMade","DrawdownRepaid","LOCClosed"]},"log_index":{"type":"integer","minimum":0}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The PartnerWebhook object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"PartnerWebhook":{"oneOf":[{"$ref":"#/components/schemas/DrawdownWebhook"},{"$ref":"#/components/schemas/RepaymentWebhook"},{"$ref":"#/components/schemas/FacilityClosureWebhook"}],"discriminator":{"propertyName":"event_type"}},"DrawdownWebhook":{"type":"object","additionalProperties":false,"required":["event_id","event_type","occurred_at","correlation_id","resource"],"properties":{"event_id":{"type":"string","pattern":"^evt_[A-Za-z0-9]+$"},"event_type":{"type":"string","enum":["drawdown.funded","drawdown.rejected","drawdown.failed"]},"occurred_at":{"type":"string","format":"date-time"},"correlation_id":{"type":"string","minLength":1,"maxLength":128},"resource":{"$ref":"#/components/schemas/DrawdownWebhookResource"},"blockchain":{"$ref":"#/components/schemas/WebhookBlockchainEvidence"}}},"DrawdownWebhookResource":{"type":"object","additionalProperties":false,"required":["type","id","facility_id","status","resource_version"],"properties":{"type":{"type":"string","const":"drawdown"},"id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"status":{"type":"string","enum":["FUNDED","REJECTED","FAILED"]},"resource_version":{"type":"integer","minimum":1}}},"WebhookBlockchainEvidence":{"type":"object","additionalProperties":false,"description":"Present for confirmed on-chain drawdown or repayment evidence and absent for off-chain validation rejection.","required":["chain_id","contract_address","transaction_hash","block_number","event_name","log_index"],"properties":{"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"event_name":{"type":"string","enum":["DrawdownApproved","DrawdownRejected","RepaymentMade","DrawdownRepaid","LOCClosed"]},"log_index":{"type":"integer","minimum":0}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"RepaymentWebhook":{"type":"object","additionalProperties":false,"required":["event_id","event_type","occurred_at","correlation_id","resource"],"properties":{"event_id":{"type":"string","pattern":"^evt_[A-Za-z0-9]+$"},"event_type":{"type":"string","enum":["repayment.completed","repayment.failed"]},"occurred_at":{"type":"string","format":"date-time"},"correlation_id":{"type":"string"},"resource":{"$ref":"#/components/schemas/RepaymentWebhookResource"},"blockchain":{"$ref":"#/components/schemas/WebhookBlockchainEvidence"}}},"RepaymentWebhookResource":{"type":"object","additionalProperties":false,"required":["type","id","facility_id","drawdown_id","status","resource_version"],"properties":{"type":{"type":"string","const":"repayment"},"id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"status":{"type":"string","enum":["REPAID","FAILED"]},"resource_version":{"type":"integer","minimum":1}}},"FacilityClosureWebhook":{"type":"object","additionalProperties":false,"required":["event_id","event_type","occurred_at","correlation_id","resource"],"properties":{"event_id":{"type":"string","pattern":"^evt_[A-Za-z0-9]+$"},"event_type":{"type":"string","enum":["facility_closure.completed","facility_closure.failed"]},"occurred_at":{"type":"string","format":"date-time"},"correlation_id":{"type":"string"},"resource":{"$ref":"#/components/schemas/FacilityClosureWebhookResource"},"blockchain":{"$ref":"#/components/schemas/WebhookBlockchainEvidence"}}},"FacilityClosureWebhookResource":{"type":"object","additionalProperties":false,"required":["type","id","facility_id","status","resource_version"],"properties":{"type":{"type":"string","const":"facility_closure"},"id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"status":{"type":"string","enum":["CLOSED","FAILED"]},"resource_version":{"type":"integer","minimum":1}}}}}}
```

## The RepaymentWebhook object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"RepaymentWebhook":{"type":"object","additionalProperties":false,"required":["event_id","event_type","occurred_at","correlation_id","resource"],"properties":{"event_id":{"type":"string","pattern":"^evt_[A-Za-z0-9]+$"},"event_type":{"type":"string","enum":["repayment.completed","repayment.failed"]},"occurred_at":{"type":"string","format":"date-time"},"correlation_id":{"type":"string"},"resource":{"$ref":"#/components/schemas/RepaymentWebhookResource"},"blockchain":{"$ref":"#/components/schemas/WebhookBlockchainEvidence"}}},"RepaymentWebhookResource":{"type":"object","additionalProperties":false,"required":["type","id","facility_id","drawdown_id","status","resource_version"],"properties":{"type":{"type":"string","const":"repayment"},"id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"status":{"type":"string","enum":["REPAID","FAILED"]},"resource_version":{"type":"integer","minimum":1}}},"WebhookBlockchainEvidence":{"type":"object","additionalProperties":false,"description":"Present for confirmed on-chain drawdown or repayment evidence and absent for off-chain validation rejection.","required":["chain_id","contract_address","transaction_hash","block_number","event_name","log_index"],"properties":{"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"event_name":{"type":"string","enum":["DrawdownApproved","DrawdownRejected","RepaymentMade","DrawdownRepaid","LOCClosed"]},"log_index":{"type":"integer","minimum":0}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The RepaymentWebhookResource object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"RepaymentWebhookResource":{"type":"object","additionalProperties":false,"required":["type","id","facility_id","drawdown_id","status","resource_version"],"properties":{"type":{"type":"string","const":"repayment"},"id":{"type":"string","pattern":"^rpy_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"drawdown_id":{"type":"string","pattern":"^drw_[A-Za-z0-9]+$"},"status":{"type":"string","enum":["REPAID","FAILED"]},"resource_version":{"type":"integer","minimum":1}}}}}}
```

## The FacilityClosureWebhook object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"FacilityClosureWebhook":{"type":"object","additionalProperties":false,"required":["event_id","event_type","occurred_at","correlation_id","resource"],"properties":{"event_id":{"type":"string","pattern":"^evt_[A-Za-z0-9]+$"},"event_type":{"type":"string","enum":["facility_closure.completed","facility_closure.failed"]},"occurred_at":{"type":"string","format":"date-time"},"correlation_id":{"type":"string"},"resource":{"$ref":"#/components/schemas/FacilityClosureWebhookResource"},"blockchain":{"$ref":"#/components/schemas/WebhookBlockchainEvidence"}}},"FacilityClosureWebhookResource":{"type":"object","additionalProperties":false,"required":["type","id","facility_id","status","resource_version"],"properties":{"type":{"type":"string","const":"facility_closure"},"id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"status":{"type":"string","enum":["CLOSED","FAILED"]},"resource_version":{"type":"integer","minimum":1}}},"WebhookBlockchainEvidence":{"type":"object","additionalProperties":false,"description":"Present for confirmed on-chain drawdown or repayment evidence and absent for off-chain validation rejection.","required":["chain_id","contract_address","transaction_hash","block_number","event_name","log_index"],"properties":{"chain_id":{"type":"integer","minimum":1},"contract_address":{"$ref":"#/components/schemas/EvmAddress"},"transaction_hash":{"$ref":"#/components/schemas/TransactionHash"},"block_number":{"$ref":"#/components/schemas/UnsignedIntegerString"},"event_name":{"type":"string","enum":["DrawdownApproved","DrawdownRejected","RepaymentMade","DrawdownRepaid","LOCClosed"]},"log_index":{"type":"integer","minimum":0}}},"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The FacilityClosureWebhookResource object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"FacilityClosureWebhookResource":{"type":"object","additionalProperties":false,"required":["type","id","facility_id","status","resource_version"],"properties":{"type":{"type":"string","const":"facility_closure"},"id":{"type":"string","pattern":"^fcl_[A-Za-z0-9]+$"},"facility_id":{"type":"string","pattern":"^fac_[A-Za-z0-9]+$"},"status":{"type":"string","enum":["CLOSED","FAILED"]},"resource_version":{"type":"integer","minimum":1}}}}}}
```

## The Client object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"Client":{"type":"object","additionalProperties":false,"required":["client_id","client_name","client_type"],"properties":{"client_id":{"type":"string","minLength":1},"client_name":{"type":"string","minLength":1},"client_type":{"type":"string","const":"REMITTANCE_COMPANY"}}}}}}
```

## The BoundWallet object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"BoundWallet":{"type":"object","additionalProperties":false,"required":["wallet_id","wallet_version"],"properties":{"wallet_id":{"type":"string","pattern":"^wal_[A-Za-z0-9]+$"},"wallet_version":{"type":"integer","minimum":1}}}}}}
```

## The WorkflowReason object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"WorkflowReason":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","minLength":1}}}}}}
```

## The ErrorResponse object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable explanation."},"request_id":{"type":"string"},"correlation_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true},"issues":{"type":"array","items":{"type":"string"}}}}}}}}}
```

## The MoneyString object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"MoneyString":{"type":"string","pattern":"^(0|[1-9]\\d*)(\\.\\d+)?$","description":"Decimal display-unit amount. JSON numbers are not accepted."}}}}
```

## The PositiveMoneyString object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"PositiveMoneyString":{"type":"string","pattern":"^(?:0\\.(?:0*\\d*[1-9]\\d*)|[1-9]\\d*(?:\\.\\d+)?)$","description":"Positive decimal display-unit amount. JSON numbers are not accepted."}}}}
```

## The UnsignedIntegerString object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"UnsignedIntegerString":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}}}
```

## The CurrencyCode object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"CurrencyCode":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code."}}}}
```

## The CountryCode object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"CountryCode":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code."}}}}
```

## The EvmAddress object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"EvmAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}}}
```

## The TransactionHash object

```json
{"openapi":"3.1.0","info":{"title":"Qiro Partner Instant Settlement API","version":"1.0.0-draft"},"components":{"schemas":{"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}}}}
```


# Risks

Qiro Vaults allocates to real private credit. This means real credit risk, not crypto-native smart contract risks dressed up as yield. Investors should understand both layers.

### Credit risk

Private credit can default. A borrower may fail to repay on time or at all. Qiro mitigates this through:

* **Institutional underwriting:** every deal deployed through a vault has been through Qiro's credit process: financial analysis, risk scoring, rating policy. We do not deploy to ununderwritten deals.
* **Secured position:** every facility is secured against identified collateral, typically the borrower's own receivables, with security cover of 1.0x to 1.5x.
* **Diversification:** multiple loans and/or funds can be active simultaneously within a vault, reducing single-borrower concentration.
* **Hard gates:** bright-line exclusions are applied before underwriting begins, covering operating history, licensing, geography, and credit type.

Defaults will happen over time in any credit portfolio. The underwriting process is designed to price and select risk appropriately, not eliminate it.

### Liquidity risk

This is not a liquid product. Your capital is deployed into illiquid instruments.

* **Redemptions are async.** You submit a request; it sits in a FIFO queue until the vault has sufficient idle cash to service it.
* **No guaranteed timeline.** Redemption speed depends on loan maturities, fund withdrawal queues, and the operator's capital recycling decisions.
* **Idle cash only pays redemptions.** If all capital is deployed and no strategies have matured, the redemption queue will wait.

Do not allocate capital you may need at short notice.

### Smart contract risk

The vault contracts have been audited (see [Security Audits](/vaults-technical-overview/security-audits)) and use standard, audited dependencies (OpenZeppelin, Solady). Known audit findings have been remediated.

Smart contract risk cannot be fully eliminated. Bugs or exploits in the vault contracts could result in loss of funds. The contracts are not upgradeable, so deployed code cannot be changed after you deposit.

### Regulatory risk

Private credit investing is regulated in most jurisdictions. Investors are responsible for ensuring their participation is compliant with applicable law. Qiro operates with KYC/KYB requirements and targets accredited/institutional investors only.


# Terms of Use

## Terms of Use

These Terms of Use govern your access to and use of the Qiro website, smart contracts, and related services. By accessing or using the Services, you acknowledge and agree to be bound by these Terms.

Effective date: 2 May 2026

Last updated: 2 May 2026

### Introduction

Welcome to Qiro (<https://www.qiro.fi/>) ("Qiro," "we," "our," "us"). Qiro provides blockchain-based technology services that enable investors and borrowers to interact through smart contracts and an Issuer Special Purpose Vehicle (the "Issuer SPV") for tokenized loan transactions. The Issuer SPV in respect of a given Vault or deal will be one of QuantVault SPV Inc., Straton SPV Inc. or such other special purpose vehicle as is identified in the relevant transaction documentation, each incorporated in Panama.

Qiro is a commercial brand and platform name. The Qiro Platform is operated by Celestia Market Inc. Celestia may provide curation, credit screening, monitoring, operational support, whitelist administration, dashboard functionality and related services to Issuer SPVs under the relevant Curator Services Agreement. Celestia is not the issuer of any Vault Token, the lender of record under any Facility, a Borrower counterparty, custodian, fiduciary, investment manager, broker, dealer, transfer agent, paying agent, VASP, money transmitter, guarantor or backstop. The relevant Issuer SPV is the sole legal obligor under the applicable Vault Deed Poll. Celestia's curation and operational support does not constitute a guarantee or endorsement of any Borrower, Facility, Vault Token, Reference Value, Recovery Amount, return, liquidity or investment outcome. Users must make their own assessment and obtain independent advice.

These Terms govern general access to the public Qiro website and related public-facing services. Access to the Qiro Protocol Dashboard, onboarding flow, Vault participation, Token holding, Redemption and Programme functionality is also subject to the Protocol Umbrella Terms, the Vault Deed Poll, the Onboarding Acknowledgement and other applicable Programme Documents. In the event of inconsistency regarding Tokenholder rights, Redemption, Recovery Amount, eligibility, transfer restrictions or Programme mechanics, the operative Programme Documents prevail. References in these Terms to the "Qiro Platform" are to the public website, dashboard and related services operated by Celestia Market Inc.

These Terms of Use ("Terms") govern your access to and use of the Qiro website, smart contracts, and related services (collectively, the "Services"). By accessing or using the Services, you acknowledge and agree to be bound by these Terms, and you confirm that you meet the applicable eligibility requirements.

If you do not agree with these Terms, you may not access or use the Services.

### Eligibility Requirements

To access and use the Qiro platform and Services, you must meet the following eligibility criteria.

### 1. General Requirements

* You must be at least 18 years of age (or the legal age of majority in your jurisdiction).
* You must have the legal capacity and authority to enter into binding contracts.
* You must not be a resident of or located in a jurisdiction that is sanctioned, restricted, or prohibited by applicable international laws, including those imposed by the United Nations, the United States, the European Union, the United Kingdom, or other competent authorities.

### 2. Investor Eligibility

If you are accessing the platform as an Investor, you represent and warrant that:

* You qualify as an accredited, professional, sophisticated, or otherwise qualified investor under the standards applicable in your jurisdiction.
* You have successfully completed the AML/KYC verification required by the relevant Issuer SPV or its appointed service providers.
* You shall provide accurate and complete tax residency self-certifications (including, where applicable, under FATCA and CRS regimes) and consent to the disclosure of such information to competent tax authorities or their delegates, as required by applicable law.
* You represent and warrant that you are not a Sanctioned Person and are not owned or controlled (directly or indirectly, 50% or more in aggregate) by any Sanctioned Person, including persons or entities designated by OFAC, the European Union, the United Kingdom HM Treasury, the United Nations, or the Monetary Authority of Singapore. You further undertake not to use the Services in violation of applicable sanctions programs.
* You understand and accept that investments involve risk of capital loss, and Qiro does not provide financial, legal, or tax advice.
* You agree to comply with the Vault Deed Poll and Onboarding Acknowledgement and any offering documents relating to Vault Tokens issued by the Issuer SPV, including any restrictions on transferability, resale, lock-up, or secondary trading, as applicable.

In addition, as an Investor you acknowledge and agree that:

* Your participation in the Services and acquisition of any Vault Tokens or related instruments does not require licensing, registration, or authorization under the laws applicable to you, or that you have obtained all such required approvals, consents, or exemptions.
* You possess the knowledge, experience, and capacity to evaluate the merits and risks of participating in tokenized lending transactions, and you have had the opportunity to seek independent legal, tax, accounting, and financial advice before making any investment decision.
* You have not relied on Qiro, its affiliates, or its personnel for any investment recommendation, suitability assessment, or fiduciary duty of any kind.
* All subscription funds or digital assets used in connection with the Services are derived from legitimate, lawful sources and are not linked to money laundering, terrorist financing, corruption, fraud, or any other unlawful activity.
* You acknowledge that Vault Tokens or other instruments issued by the Issuer SPV may be illiquid, non-transferable, or subject to restrictions, and that no assurance is given as to the existence of a secondary market or your ability to exit your investment.
* You are solely responsible for all tax liabilities arising from your participation, and Qiro shall have no liability for any such obligations, except where required by Applicable Law to withhold or deduct taxes.

### 5. Prohibited Users

You may not use the Services if you:

* Are under the age of 18 (or the age of majority in your jurisdiction).
* Have been previously suspended or removed from the Qiro platform.
* Provide false, misleading, or incomplete information.

### 6. Important Notices Applicable to Your Use of the Service

Please read the following notices carefully. By accessing or using the Qiro platform and Services, you acknowledge and agree that:

#### Technology Service Provider Only

Qiro Platform role. Qiro is a commercial brand and platform name. The Qiro Platform is operated by Celestia Market Inc. Celestia may provide platform access, dashboard functionality, curation, credit screening, monitoring, operational support, whitelist administration and related services to Issuer SPVs under the applicable Curator Services Agreement. Celestia does not, by providing those services, become the issuer of any Vault Token, the lender of record under any Facility, a Borrower counterparty, custodian, fiduciary, investment manager, broker, dealer, transfer agent, paying agent, VASP, money transmitter, guarantor or backstop.

Investor rights in respect of any Vault Token arise only against the relevant Issuer SPV under the applicable Vault Deed Poll and related Programme Documents. Borrower obligations arise only under the applicable Facility Agreement in favour of the Issuer SPV / Lender. No user has any direct claim against a Borrower by reason only of holding a Vault Token, unless expressly provided in the relevant transaction documents.

#### No Advice

* Information provided on or through the Qiro platform (including dashboards, reports, and smart contract data) is for informational purposes only.
* Qiro does not provide legal, accounting, tax, financial, or investment advice.
* You should obtain independent professional advice before making any decision.

#### Regulatory Status

* The regulatory treatment of digital assets, tokenized securities, and stablecoins such as USDC varies by jurisdiction.
* By using the Service, you confirm that you are legally permitted to do so in your jurisdiction and that you meet all eligibility requirements under these Terms.

#### Risk of Loss

* Participation in blockchain-based lending and investment structures involves significant risk, including the risk of partial or total loss of capital.
* Transactions on public blockchains are irreversible, and Qiro cannot reverse, cancel, or recover transfers.

#### User Responsibility

* You are solely responsible for maintaining the security of your wallet, private keys, and access credentials.
* Qiro has no ability to access, recover, or replace lost or compromised keys or wallets.

#### No Guarantee

* Qiro makes no representation, warranty, or guarantee regarding borrower repayment, performance of any investment, or enforceability of legal agreements.
* Past performance of any borrower, investment, or loan structure is not indicative of future results.

#### Suspension or Termination

Qiro reserves the right to suspend, restrict, or terminate your access to the Services if you fail to comply with these Terms, lose eligibility, or use the Services in a manner that may harm Qiro, its technology, or other users.

### 7. Token Transfer Controls

* Transfer Restrictions: All digital tokens or other tokenized instruments ('Tokens') made available through or in connection with the Qiro Platform are subject to the Vault Deed Poll, the Onboarding Acknowledgement and other applicable Programme Documents provided by the relevant Issuer SPV. Users acknowledge and agree that: (a) where the relevant Vault Particulars Schedule specifies a Permissioned Transfer Restriction Mode, the Code rejects any attempted transfer of a Token to a wallet address that is not Currently Whitelisted, and no such transfer will complete on-chain; Redemption rights, Recovery Amounts and other Programme rights are, in any case, exercisable only by a Currently Whitelisted Wallet Address of an Eligible Tokenholder under the applicable Programme Documents; (b) accordingly, a transferee that is not a Currently Whitelisted Wallet Address of an Eligible Tokenholder may hold a Token that is economically impaired or non-redeemable until onboarding, KYC and whitelisting are completed; (c) any attempted transfer, assignment, pledge, encumbrance, or disposal of Tokens in violation of the contractual restrictions in the applicable Programme Documents shall not entitle the transferee to exercise Programme rights and shall not be recognised by the Qiro Platform or the relevant Issuer for Programme purposes; and (d) the Qiro Platform and the relevant Issuer reserve the right, without liability, to prevent, block, suspend, refuse or defer any Redemption, Recovery or other Programme-level action that they reasonably believe to be unauthorized, unlawful, non-compliant, fraudulent, sanctioned or otherwise contrary to the applicable Programme Documents, these Terms of Use, or Applicable Law.
* Technical Controls: Users acknowledge and agree that Qiro Platform, the relevant issuer, or their service providers may implement smart contracts, whitelisting, lock-up mechanisms, transfer agent controls, or other technical restrictions to enforce the applicable Programme Documents and other Token transfer limitations. Users shall not, directly or indirectly, circumvent or attempt to circumvent any such technical controls.
* Regulatory Compliance: Users further acknowledge that Token transfers may be restricted, delayed, or denied where necessary for compliance with: (a) anti-money laundering (AML), countering the financing of terrorism (CFT), sanctions, and know-your-customer (KYC) obligations; (b) securities laws, financial regulations, or other Applicable Laws in any relevant jurisdiction; or (c) orders, directions, or requests by regulators, governmental authorities, courts, or arbitral tribunals.
* No Guarantee of Liquidity: Qiro Platform makes no representation or warranty that Tokens will be tradable, liquid, or capable of transfer at any particular time, or that any secondary market or transfer facility will exist for such Tokens. Users bear the sole responsibility for understanding and accepting the illiquid nature and restrictions attached to any Tokens they acquire, as set forth in the applicable Programme Documents.

### 8. Use Restrictions of Service and Content

By accessing or using the Qiro platform and Services, you agree to comply with the following restrictions:

#### a. Permitted Use

* You may use the Services solely for lawful purposes and in accordance with these Terms.
* You may access the platform, smart contracts, and related content only for your personal or internal business use as an eligible Investor or Borrower.

#### b. Prohibited Use of Services

You shall not, and shall not attempt to:

* Use the Services for any unlawful, fraudulent, or prohibited activity, including money laundering, terrorist financing, or sanctions evasion.
* Circumvent, disable, or tamper with any security features of the platform or smart contracts.
* Use automated systems (bots, scrapers, crawlers) to access or interact with the platform except as expressly permitted.
* Interfere with or disrupt the normal operation of the blockchain networks, smart contracts, or the Qiro platform.
* Misrepresent your identity, eligibility status, or provide false, misleading, or incomplete information.
* Attempt to gain unauthorized access to other users' wallets, accounts, or data.

#### c. Restrictions on Content

All content made available through the Qiro platform, including but not limited to text, reports, dashboards, smart contract outputs, software, graphics, trademarks, and logos ("Content"), is protected by intellectual property laws. You may not:

* Copy, reproduce, distribute, or modify the Content without prior written consent.
* Use Qiro's Content for any commercial purpose other than your own permitted participation as an Investor.
* Create derivative works, reverse engineer, or attempt to extract the source code of any smart contracts or software used in connection with the Services.
* Use Qiro's name, branding, or Content in a way that suggests sponsorship, endorsement, or affiliation without express authorization.

### 9. Reservation of Rights

Qiro and its licensors retain all rights, title, and interest in and to the Services and Content. Your use of the Services does not grant you any ownership rights or licenses beyond those expressly set forth in these Terms.

### 10. Dispute Resolution and Governing Law

This Section 10 applies only to disputes relating to general access to, and use of, the public Qiro website and platform. Any dispute relating to Tokenholder rights, Redemption, Recovery Amount, Deed Poll obligations or Programme mechanics is governed by, and subject to the dispute resolution provisions of, the applicable Programme Documents, including the Vault Deed Poll (which provides for ICC London arbitration), and this Section 10 does not apply to, or vary, that dispute resolution forum.

* Good Faith Resolution: The Parties shall first attempt in good faith to resolve any dispute, controversy, or claim arising out of or in connection with these Terms of Use, including any question regarding their existence, validity, interpretation, performance, or termination ("Dispute"), through negotiations between their duly authorized representatives. If the Parties are unable to resolve the Dispute within thirty (30) days from the date one Party notifies the other in writing of the Dispute, the matter shall be referred to arbitration in accordance with Clause 2 below.
* Arbitration: Any Dispute not resolved under Clause 1 shall be referred to and finally resolved by arbitration administered by the Singapore International Arbitration Centre (SIAC) in accordance with the SIAC Rules in force at the time of the arbitration, which rules are deemed to be incorporated by reference into this clause. The seat of arbitration shall be Singapore, the language of the arbitration shall be English, and the arbitral tribunal shall consist of a sole arbitrator appointed in accordance with the SIAC Rules. The decision of the arbitrator shall be final and binding on the Parties.
* Carve-Out for Litigation and Injunctive Relief: Notwithstanding Clause 2, Qiro Platform shall have the right to seek interim, injunctive, or equitable relief, or to enforce indemnification obligations, in the courts of competent jurisdiction in Singapore or any other jurisdiction where such relief is required, without prejudice to its right to pursue arbitration on the merits.
* Prevailing Party Fees: In any arbitration, litigation, or other proceeding to resolve a Dispute, the prevailing party shall be entitled to recover its reasonable attorneys' fees, expert fees, arbitration costs, court costs, and all other expenses incurred in connection with such proceeding, in addition to any other relief to which such party may be entitled. The tribunal (or court, as applicable) shall determine the prevailing party and the amount of such fees and costs.
* Indemnity Enforcement: The Investor acknowledges and agrees that indemnity obligations under these Terms of Use are independent of the dispute resolution mechanism and may be enforced directly by Qiro Platform in court or arbitration, at Qiro Platform's sole discretion.
* No Class or Representative Actions: The Parties agree that any Dispute shall be conducted solely on an individual basis. Neither Party shall bring or participate in any class, collective, or representative action, and the arbitrator shall have no authority to consolidate claims of multiple parties or to preside over any form of class or representative proceeding.
* Governing Law: These Terms of Use and any Dispute shall be governed by and construed in accordance with the laws of Singapore, without regard to its conflict of law principles.

### 11. Tax and Accounts Responsibility

* User Responsibility for Taxes: Each user acknowledges and agrees that they are solely responsible for determining, reporting, withholding, collecting, filing, and remitting any and all taxes, duties, levies, imposts, charges, or assessments (including but not limited to income, capital gains, value-added, goods and services, stamp, transfer, or withholding taxes) that may be imposed, assessed, or become payable under Applicable Law in connection with their participation in any investment opportunity, holding of Tokens, or use of the Services.
* No Responsibility for User Taxes: Qiro Platform shall have no obligation or liability for any taxes owed by any user or investor in connection with any investment or use of the Services, except where Qiro Platform is required by Applicable Law to withhold or deduct taxes at source. In such circumstances, Qiro Platform may withhold or deduct such taxes and shall have no liability to the user for such amounts.

### 12. Disclaimer of Representations and Warranties

The Platform and Services are provided on an "as is" and "as available" basis. To the maximum extent permitted by Applicable Law, Qiro and the Qiro Parties (its affiliates, directors, officers, employees, agents and service providers) disclaim all representations, warranties and conditions of any kind, express, implied or statutory, including any implied warranty of merchantability, fitness for a particular purpose, title, non-infringement, accuracy, reliability, security, completeness or availability. Qiro makes no representation or warranty that the Services will be uninterrupted, error-free or secure, that any content, data, projection, forecast, valuation or model accessed through the Services will be accurate or reliable, that any investment opportunity will be successful, profitable, suitable, liquid or capable of disposal on favourable terms, or that the Services or any investment opportunity are lawful, appropriate or available in any particular jurisdiction.

Nothing in or through the Services constitutes investment, legal, tax, accounting, financial or other professional or fiduciary advice. Qiro does not owe any fiduciary or advisory duty to any User. Vault Tokens are issued solely by the relevant Issuer SPV; Borrowers are counterparties to Facility Agreements with the Issuer SPV and are not issuers of Vault Tokens; Qiro / Celestia is not the issuer, underwriter, guarantor, obligor or counterparty in respect of any Vault Token or Facility. Users are solely responsible for ensuring compliance with all Applicable Laws of their jurisdiction of residence, incorporation or operation, including any licensing, registration or authorisation requirements, and for conducting their own independent due diligence and obtaining qualified professional advice before making any investment decision.

### 13. Limitation of Liability

To the fullest extent permitted by Applicable Law, in no event shall any Qiro Party be liable to any User, investor or third party for any losses, damages, liabilities, costs or expenses, whether arising in contract, tort (including negligence), statute, equity or otherwise, in excess of the greater of (a) the total fees actually paid by the User to Qiro in the twelve (12) months immediately preceding the event giving rise to the claim and (b) one hundred United States Dollars (USD $100). In no event shall any Qiro Party be liable for any indirect, consequential, incidental, exemplary, punitive or special damages of any kind, including damages for lost profits, loss of data, loss of goodwill, loss of opportunity, business interruption, trading losses, reputational damage or anticipated savings, even if advised of the possibility of such damages.

Without limiting the foregoing, Qiro disclaims and shall have no liability for any act, omission, misrepresentation, breach, default, insolvency or failure of performance by any Issuer SPV or Borrower. Users acknowledge that, in respect of any Vault Token, Redemption, Recovery Amount, Reference Value, Borrower default, Facility loss or Vault shortfall, their recourse is only as set out in the applicable Vault Deed Poll and Programme Documents, and is against the relevant Issuer SPV only unless another person has expressly and unambiguously assumed liability in a Programme Document. No user has any direct claim against any Borrower merely by accessing the Platform or holding a Vault Token. The disclaimers, exclusions and limitations of liability in these Terms reflect a reasonable allocation of risk between the parties and are fundamental to the basis of the bargain. Nothing in these Terms excludes or limits liability for fraud or fraudulent misrepresentation, willful misconduct, gross negligence, or any liability that cannot be excluded or limited under Applicable Law. For the avoidance of doubt, this Section 13 limitation of liability does not apply to the relevant Issuer SPV's primary obligation to pay the Recovery Amount, or to any claim governed by the Vault Deed Poll, and the liability, limitation and savings-clause provisions of the Vault Deed Poll prevail in respect of any such claim.

### 14. Jurisdictional Access & Reverse Solicitation

#### No Active Solicitation

Qiro Platform operates as a technology service provider offering access to a blockchain-based infrastructure. Qiro does not conduct marketing, solicitation, or active promotion of the Services in any jurisdiction where such activities would be unlawful or require licensing, registration, or authorization. Any access to, or use of, the Services by users in such jurisdictions occurs solely on the basis of the user's independent initiative and reverse solicitation.

#### User Representation of Reverse Solicitation

By accessing or using the Services, each user expressly represents, warrants, and undertakes that:

* they have independently sought out, accessed, and engaged with the Services at their own initiative, without any solicitation, invitation, inducement, marketing, or promotion by Qiro;
* they have not been targeted by, and have not relied upon, any direct communication, offer, or advertisement from Qiro intended to solicit their participation in any investment or loan transaction; and
* their access to the Services complies with all applicable laws and regulations in their jurisdiction of residence, incorporation, or operation.

#### Restricted Jurisdictions

Users acknowledge and agree that the Services are not offered to, and may not lawfully be accessed or used by, residents or entities incorporated in jurisdictions subject to comprehensive international sanctions, embargoes, or prohibitions under United Nations, United States, European Union, United Kingdom, or other applicable supranational or governmental authority lists. Qiro reserves the right to restrict, suspend, or terminate access to the Services in whole or in part, at its sole discretion, for users located in or connected with any such restricted jurisdiction.

#### Dispute Resolution

All disputes, controversies, or claims arising out of or relating to the access, use, or general operation of the Qiro platform ("Disputes") shall be governed by, and resolved in accordance with, Section 10 (Dispute Resolution and Governing Law) above. This Section 14(iv) applies only to disputes relating to general platform access and use, and does not override the dispute resolution provisions of the Vault Deed Poll or other Programme Documents applicable to Tokenholder rights or Redemption-related disputes.

#### No Regulatory Representation

Qiro makes no representation, warranty, or assurance that the Services, or any investment or loan opportunity accessible via the Services, are lawful, compliant, or available in any particular jurisdiction. Users are solely responsible for ensuring compliance with all applicable local laws, licensing requirements, and regulatory restrictions, and Qiro expressly disclaims all liability in respect of any such compliance obligations.

#### Allocation of Risk

Each user acknowledges and agrees that their use of the Services is predicated upon reverse solicitation, undertaken at their own risk and responsibility, and that Qiro shall not be deemed to have marketed, solicited, or otherwise offered the Services in the user's jurisdiction. Users further agree to indemnify and hold harmless Qiro Platform and its affiliates against any claims, liabilities, penalties, or regulatory actions arising from the user's breach of this Clause.

### 15. No Custody; User Control of Assets

#### User Control of Assets

Digital assets, stablecoins, or Tokens used in connection with the Services are held in wallets controlled by the user, or in segregated wallets operated by independent third-party service providers, the Issuer SPV, or the relevant Borrower, up to the point of deposit into a Vault. Once digital assets are deposited into a Vault, they are no longer held in a user-controlled wallet and are instead governed by the Vault, the Issuer SPV, applicable Sub-Accounts and the Programme Documents, including the Vault Deed Poll. Qiro does not, and shall not, accept deposits, take possession of, or exercise control over any user assets. All transfers are initiated and executed by users directly via smart contracts or independent counterparties.

#### No Custodial Function

Qiro does not provide custodial, safekeeping, trust, escrow, or deposit-taking services, whether in digital assets, fiat currency, or any other form. Qiro does not act as an intermediary for the receipt, transfer, or holding of client funds, nor does it maintain client accounts or balances on behalf of users. For the avoidance of doubt, no fiduciary, trustee, bailment, or agency relationship shall be created by virtue of a user's access to or use of the Services.

#### Segregation of Assets

Where the Issuer SPV or Borrowers hold digital assets in connection with tokenized lending transactions, such assets are maintained in wallets legally and operationally segregated from Qiro and its affiliates. Any obligations in relation to custody, safekeeping, or transfer of assets rest solely with the Issuer SPV, the relevant Borrower, or their appointed custodians, and not with Qiro.

#### Risk of User Wallets

Each user acknowledges and agrees that they are solely responsible for the custody, security, and management of their own private keys, wallets, and access credentials. Qiro has no ability to retrieve, replace, freeze, or reverse any transaction, nor to restore access to lost, stolen, or compromised wallets or private keys. Users bear all risks of loss, theft, compromise, or unauthorized access relating to their wallets and assets. This statement addresses general blockchain transactions and the security of user-controlled wallets, and does not limit any Code-level transfer restriction, Whitelist Action, Compliance Action, Global Halt or other control that the Issuer, Celestia or the Whitelist Administrator may exercise under the Programme Documents in respect of a Vault Token.

#### No Deposit Protection

Users acknowledge that assets used in connection with the Services are not protected by deposit insurance, investor compensation schemes, or any government guarantee of any kind. Users assume full responsibility for understanding and accepting these risks before participating in any transaction facilitated through the Services.

### 16. Independent Issuer SPV & Borrowers

#### No Agency or Partnership

The Issuer SPV, each Borrower, and other counterparties accessible through the Services are, and shall remain, independent legal entities, each conducting its own business in its own name and at its own risk. Although the Issuer SPV may be an affiliate of Qiro within the same group structure (as described in the Regulatory Status Notice), Qiro does not, and shall not, act as agent, partner, joint venturer, employee, fiduciary, or representative of the Issuer SPV, any Borrower, or other counterparty in respect of any transaction. Nothing in these Terms, the Services, or any communication from Qiro shall be construed to create, or be deemed evidence of, any agency, partnership, joint venture, employment, trust, or fiduciary relationship between Qiro and such entities in respect of any transaction. Users acknowledge that Celestia's role is limited to operating the Qiro Platform and providing the services expressly described in these Terms and the applicable Programme Documents. Investor rights in respect of any Vault Token arise against the relevant Issuer SPV under the applicable Vault Deed Poll and Programme Documents. Borrower obligations are owed to the Issuer SPV / Lender under the applicable Facility Agreement. No user has any direct contractual, proprietary, security or payment claim against any Borrower merely by accessing the Platform or holding a Vault Token.

#### No Responsibility for Counterparties

No guarantee of counterparties or outcomes. Celestia may provide curation, credit screening, monitoring, operational support, whitelist administration and related services to Issuer SPVs under the relevant Curator Services Agreement. That support does not constitute a guarantee or endorsement of any Issuer SPV, Borrower, Facility, Vault Token, Reference Value, Recovery Amount, return, liquidity, solvency or investment outcome. Users acknowledge that:

* the relevant Issuer SPV is the sole legal obligor under the applicable Vault Deed Poll;
* no user has any direct contractual, proprietary, security or payment claim against any Borrower by reason only of holding a Vault Token;
* Borrower obligations are owed to the Issuer SPV / Lender under the applicable Facility Agreement;
* Qiro / Celestia does not guarantee Borrower performance, enforceability of security, Reference Value, Recovery Amount, liquidity or return; and
* users must make their own assessment and obtain independent advice.

### 17. General Provisions

* Consent: By accessing or using the Services, each user expressly acknowledges and agrees to be bound by these Terms of Use and any other policies, guidelines, or rules incorporated by reference herein, as may be amended by Qiro Platform from time to time in its sole discretion. Continued use of the Services following any such amendments constitutes acceptance of the revised Terms. In the event of conflict between these Terms and any applicable Programme Document, including the Vault Deed Poll, Onboarding Acknowledgement, Facility Agreement or Disclosure Document, the applicable Programme Document shall prevail.
* Indemnity: The user agrees to indemnify, defend, and hold harmless Qiro Platform, its affiliates, directors, officers, employees, agents, contractors, and service providers from and against any and all claims (except to the extent arising from Qiro's gross negligence, fraud, or willful misconduct), actions, proceedings, losses, liabilities, damages, penalties, fines, costs, and expenses (including reasonable legal fees) arising out of or in connection with: (a) the user's breach of these Terms of Use; (b) the user's violation of any Applicable Law; (c) the user's misrepresentation of eligibility, investment status, or compliance obligations; or (d) any third-party claim relating to the user's conduct, acts, or omissions in connection with the Services. This carve-out (gross negligence, fraud or willful misconduct) applies to these general platform Terms. Where these Terms apply to investor-facing Programme use, the broader carve-outs in the Vault Deed Poll (including bad faith, intentional breach, willful default, knowing misuse of administrative powers and misappropriation) prevail for any claim relating to Tokenholder rights or Programme obligations.
* Operation of Service: Qiro Platform reserves the right, at any time and without notice, to modify, suspend, withdraw, restrict, or discontinue the Services, in whole or in part, including access to any investment opportunity, platform feature, or content. Qiro Platform shall not be liable to any user or third party for any modification, suspension, withdrawal, or discontinuance of the Services.
* Publicity: Unless otherwise agreed in writing, users may not use Qiro Platform's name, trademarks, trade names, logos, or branding in any advertising, marketing, or publicity without the prior written consent of Qiro Platform. Qiro Platform may, however, make general references to its user base and activity on the platform in its own promotional or investor-facing materials, provided that no confidential or personally identifying information is disclosed without consent.
* Force Majeure: Qiro Platform shall not be liable or responsible to any user, investor, or third party, nor be deemed to have defaulted under or breached these Terms of Use, for any failure or delay in performing its obligations where such failure or delay results from any cause, condition, or circumstance beyond its reasonable control, including but not limited to: acts of God, natural disasters, fire, flood, earthquake, explosion, epidemic, pandemic, war, terrorism, civil commotion, strikes, labor disputes, embargoes, governmental orders, changes in law or regulation, power or telecommunications failures, or denial-of-service attacks (each, a "Force Majeure Event").
* Blockchain Events: Without limiting Clause 1, users expressly acknowledge and agree that Qiro Platform shall not be liable for any failure, delay, loss, error, or disruption caused, directly or indirectly, by events specific to blockchain, distributed ledger, or digital asset systems, including but not limited to: (a) hard forks, soft forks, protocol changes, upgrades, or changes to consensus mechanisms; (b) failures, delays, congestion, or errors in underlying blockchain networks or related infrastructure; (c) exploitation, hacking, double-spending, 51% attacks, malicious smart contracts, or security breaches in blockchain networks, protocols, or third-party wallets; (d) unavailability, malfunction, or failure of digital wallets, private keys, custodial services, or exchanges; (e) cryptographic or algorithmic weaknesses, failures, or exploits; and (f) market volatility, illiquidity, or collapse of digital asset markets.
* Severability: If any provision of these Terms of Use is held to be invalid, illegal, or unenforceable by a court or arbitral tribunal of competent jurisdiction, such provision shall be enforced to the maximum extent permissible, and the remaining provisions shall continue in full force and effect.
* Survival: Qiro may suspend or terminate your access to the Services at any time, with or without cause. Termination shall not limit or affect any rights or obligations accrued prior to termination. Provisions relating to indemnity, limitation of liability, intellectual property, dispute resolution, tax obligations, disclaimers, and survival shall survive any termination of these Terms.
* Communications: Users consent to receive all communications, notices, disclosures, and other information from Qiro Platform electronically, whether by email, platform notifications, or other electronic means. Such communications shall be deemed to satisfy any legal requirement that such communications be in writing.
* Investigations and Cooperation with Law Enforcement: Qiro Platform reserves the right, in its sole discretion and without liability, to investigate any suspected violation of these Terms of Use or any activity that may be illegal, unlawful, or harmful to the Services or users. Qiro Platform may cooperate fully with any law enforcement authorities, regulators, governmental bodies, or court orders requesting or directing disclosure of information or materials related to users or their use of the Services.
* Assignment: These Terms of Use, and any rights or obligations hereunder, may be assigned, transferred, or novated by Qiro Platform without restriction. Users may not assign, transfer, or sublicense their rights or obligations under these Terms without the prior written consent of Qiro Platform, and any purported assignment in violation hereof shall be null and void.
* No Waiver: No failure or delay by Qiro Platform in exercising any right, power, or remedy under these Terms shall operate as a waiver thereof, nor shall any single or partial exercise of any right, power, or remedy preclude any other or further exercise of the same or any other right, power, or remedy.
* Connectivity and Access: Users are solely responsible for obtaining and maintaining the devices, hardware, software, telecommunications, internet connections, and other resources necessary to access and use the Services. Qiro Platform makes no representation or warranty that the Services will be compatible with any particular device, operating system, or connectivity environment, and disclaims all liability for any interruptions, delays, or failures resulting from user-side connectivity issues.

### 18. Notices

Any notice, request, demand, or other communication required or permitted to be given under these Terms of Use shall be in writing and shall be deemed duly given when delivered:

* by electronic mail to the user's registered email address or to <legal@qiro.fi>;
* by posting on the Qiro Platform platform, dashboard, or website; or
* by courier or registered post to the last known physical address of the relevant Party.

Notices shall be deemed effective:

* if sent by email, on the date of transmission (provided no bounce-back or delivery failure notice is received);
* if posted on the platform, at the time of posting; and
* if sent by courier or registered post, on the date of delivery as recorded by the courier/postal service.

Change of Contact Details: It shall be the responsibility of each user to ensure that their contact details registered with Qiro Platform remain current and accurate. Qiro Platform shall not be liable for any loss, delay, or failure in communication caused by the user's failure to update such details.

The Qiro platform and Services are operated by Celestia Market Inc., a company incorporated in Panama, with registration number 155772823.


# Privacy Policy

## Privacy Policy

Qiro ("we," "our," "us") is committed to protecting the privacy of our investors, borrowers, partners, and platform users. This Privacy Policy explains how we collect, use, store, and share information when you interact with our services, including the Qiro platform (<https://www.qiro.fi/>), our smart contracts, wallets, and related financial services supporting tokenized credit investments.

Effective date: 2 October 2025

Last updated: 23 July 2026

### Overview

By accessing or using the Qiro Platform, you acknowledge that you have been provided with this Privacy Policy. Where required by applicable law, we will seek your consent for specific processing activities.

### 1. Information We may Collect

We may collect the following categories of information:

#### 1.1 Personal Information Provided by Investors

* Full name, date of birth, nationality, and identification documents (passport, ID card, driver's license).
* Contact details (email address, phone number, residential address).
* Financial and professional information required for KYC/AML checks.
* Accredited/qualified investor certifications (where applicable).

#### 1.2 Wallet and Transaction Data

* Blockchain wallet addresses used for investments and repayments.
* Details of subscriptions, token holdings, disbursements, and repayment transactions.
* Vault smart contracts, Facility-related payment flows, Token records, wallet addresses and analogous Programme interactions.

#### 1.4 Platform and Technical Data

* IP addresses, device identifiers, and browser information.
* Usage data from the Qiro platform and dashboards.
* Cookies and similar technologies (if applicable).

### 2. How We Use Information

Depending on the processing activity, Qiro, Celestia Market Inc. and the relevant Issuer SPV may act as data controller, joint controllers or processor under applicable data protection law (including GDPR, UK GDPR, CCPA and Panama Law 81 of 2019). The default role allocation is: (i) website / platform analytics — Celestia as controller; (ii) KYC / KYB / sanctions onboarding — Issuer and/or Celestia as controller(s), with KYC provider as processor; (iii) Whitelist administration — Issuer and/or Celestia; (iv) Tokenholder records — Issuer; (vi) Partner Vault data — Partner / Partner Issuer and/or Celestia, as agreed per partner vault. Qiro and the relevant Issuer SPV use the collected information for the following purposes:

* Regulatory Compliance: To perform AML/KYC checks and comply with applicable laws.
* Fund Flow Execution: To process subscriptions, issue tokens, disburse loans, and route repayments.
* Risk Management: To verify borrower eligibility, enforce security pledges, and manage investor protections.
* Platform Operations: To provide dashboards, investor reporting, and marketplace services.
* Security: To prevent fraud, unauthorized transactions, and malicious activities.
* Communications: To provide investors and borrowers with reports, notices, and disclosures.

### 3. Legal Basis for Processing

We process personal data on the following bases:

* Consent: Where you have given explicit consent.
* Contractual Necessity: To perform obligations under the Vault Deed Poll, Onboarding Acknowledgement, Facility Agreement and other applicable Programme Documents.
* Legal Obligations: To comply with AML, KYC, tax, and regulatory requirements.
* Legitimate Interests: To safeguard platform integrity, investor protections, and operational efficiency.

### 4. Cross-Border Data Transfers and Third Party Services

We may share your personal information with carefully selected third-party service providers to help us operate, provide, and improve our services. These third parties may include:

* Identity verification and compliance providers for Know-Your-Customer (KYC) and Anti-Money Laundering (AML) obligations.
* Cloud hosting, storage, and IT providers to securely manage data.
* Payment processors, custodians, and banking partners to facilitate transactions.
* Analytics, fraud prevention, and security services to maintain the integrity of our platform.

We require all third parties to process your information in accordance with applicable data protection laws and our instructions. They are prohibited from using your information for their own purposes.

Because we operate internationally, your personal information may be transferred to and processed in jurisdictions outside of your country of residence, including countries that may not provide the same level of data protection as your home jurisdiction.

Where such cross-border transfers occur, we implement appropriate safeguards to protect your personal information, including:

* Standard Contractual Clauses (SCCs) approved under the General Data Protection Regulation (GDPR).
* Binding contractual obligations requiring recipients to safeguard personal data.
* Technical and organizational measures such as encryption and restricted access.

For residents of the European Economic Area (EEA), United Kingdom, or Switzerland, we will only transfer your personal data to jurisdictions recognized as providing adequate protection or subject to legally valid transfer mechanisms.

For residents of California, we comply with the California Consumer Privacy Act (CCPA), ensuring you have the right to know, access, delete, and opt out of the sale or sharing of your personal data. We do not sell your personal information.

### 5. Cross-Border Processing by Issuers, Celestia and Programme Participants

Personal Data may be processed by the relevant Issuer SPV, by Celestia in its capacity as platform operator, Curator and/or Whitelist Administrator, and by other Programme participants or service providers where necessary for the Qiro Programme.

The relevant Issuer SPV may include entities such as QuantVault SPV Inc., Straton SPV Inc. or any other Issuer SPV identified in the applicable Programme Documents. Celestia Market Inc. is not described in this Privacy Policy as an Issuer SPV merely because it processes Personal Data in its platform, Curator or service-provider capacity.

Where Personal Data is transferred internationally or processed by Programme participants in different jurisdictions, we use appropriate safeguards where required by applicable law, which may include contractual obligations, Standard Contractual Clauses, access controls, confidentiality obligations, technical and organisational measures, and purpose limitations.

Data shared with the relevant Issuer SPV, Celestia or other Programme participants is limited to what is reasonably necessary for onboarding, KYC / KYB, sanctions screening, Whitelist administration, investor eligibility, Tokenholder records, Redemption, reporting, compliance, dispute handling and analogous Programme purposes.

Requests to access, rectify, delete, restrict or otherwise exercise rights in respect of off-chain Personal Data may be submitted to Qiro / Celestia using the contact details in this Privacy Policy. Qiro / Celestia will coordinate with the relevant Issuer SPV, service provider or Programme participant where necessary.

### 6. Data Retention

We retain data for as long as necessary to:

* Fulfill the purposes outlined in this policy.
* Comply with legal and regulatory obligations.
* Enforce contractual rights and resolve disputes.

Investor and borrower identity records are typically retained for 7 years post-termination of the business relationship, subject to jurisdictional requirements.

### 7. Data Security

Qiro employs a comprehensive framework of technical, organizational, and administrative safeguards designed to protect personal data and other confidential information from unauthorized access, disclosure, alteration, or destruction. Our security program is aligned with industry standards and financial services best practices and includes, without limitation:

* Encryption protocols for data in transit and at rest, where applicable.
* Strict access controls and multi-factor authentication to ensure that only authorized personnel may access sensitive information.
* Segregation of duties and role-based permissions to minimize risks of internal misuse.
* Regular monitoring, vulnerability assessments, and audits to identify and address emerging threats.
* Secure infrastructure and storage solutions, including third-party service providers that are contractually bound to adhere to equivalent security measures.

Further to demonstrate our commitment to the highest standards of security and regulatory compliance:

* Independent Audits: We engage reputable third-party firms to perform annual smart-contract and system security audits. Summaries of audit findings will be publicly disclosed to provide transparency and assurance to our users.
* Responsible Disclosure: We maintain a responsible vulnerability disclosure program that allows security researchers to report issues in a safe, coordinated, and legally protected manner.
* Breach Notification: In the unlikely event of a personal data or system security breach, Qiro will notify affected individuals and competent supervisory authorities without undue delay, in accordance with applicable law (e.g., GDPR, CCPA). Notifications will include the nature of the breach, potential impacts, and remedial steps taken.
* Continuous Monitoring: Our systems are subject to ongoing monitoring, penetration testing, and incident-response protocols to identify and address emerging threats in real time.

Blockchain and Decentralized Network Considerations: Certain information, such as wallet addresses and on-chain transaction records, may be publicly recorded on decentralized networks. Such data is by its nature immutable, transparent, and beyond our unilateral control. While we employ rigorous measures to safeguard off-chain data, users should be aware that interactions with smart contracts or decentralized applications carry inherent security risks.

Residual Risk and User Responsibility: While we strive to apply appropriate safeguards in accordance with applicable laws and regulatory obligations, no method of transmission or storage is entirely secure. Accordingly, we cannot guarantee absolute protection of personal data. Users are responsible for maintaining the confidentiality of their access credentials, private keys, and devices used to engage with our services.

### 8. Your Rights

Depending on your jurisdiction (e.g., GDPR in the EU, PDPA in Singapore), you may have rights to:

* Access, correct, or update your personal data.
* Request deletion, subject to legal retention obligations.
* Restrict or object to processing of personal data.
* Request a copy of your data in portable format.

Requests can be submitted to <legal@qiro.fi>.

### 9. Cookies and Web Tracking

The Qiro Platform uses cookies, tracking technologies, and similar tools to enhance functionality, improve user experience, and collect information about how our services are used. These technologies allow us to:

* Recognize and remember users' preferences and settings.
* Facilitate secure login and account management.
* Monitor website traffic, usage patterns, and performance.
* Conduct analytics and market research to improve our services.
* Comply with legal and regulatory obligations, including fraud detection and security monitoring.

Further details on the categories of cookies used, their purposes, retention and your choices are set out in the Cookie Notice.

Third-Party Tracking: We may permit certain trusted third parties (such as analytics providers, compliance vendors, or security monitoring tools) to place cookies or similar technologies on our platforms. These third parties may collect information about your online activities across different services and over time, subject to their own privacy policies.

Product Analytics: With your consent, the Qiro Platform uses Mixpanel to measure explicit interactions such as vault discovery, authentication, verification, wallet connection and investment workflows. Mixpanel is not loaded before consent. You may decline or withdraw analytics consent at any time through the Analytics settings control in the platform footer without affecting essential platform functionality.

Blockchain-Specific Considerations: In addition to cookies, we may track wallet connections, transaction activity, and smart contract interactions to ensure platform integrity and compliance with applicable legal obligations. Such tracking is limited to the extent necessary to provide services and maintain security.

Most web browsers allow you to control or disable cookies through settings. Please note that if you disable or reject certain cookies, some features of our services may not function as intended. Where required by applicable law (e.g., GDPR, ePrivacy Directive, CCPA), we will obtain your consent before placing non-essential cookies or similar tracking technologies on your device.

### 10. Updates to Privacy Policy

We may update this Privacy Policy from time to time. Updates will be posted on <https://www.qiro.fi/> and the "Last Updated" date will be revised accordingly.

### 11. Disclaimer

Please note that blockchain data is public and immutable. Wallet addresses, balances, transaction hashes, and smart-contract events are recorded on decentralized ledgers that are publicly visible and cannot be altered or erased. As a result, certain data-subject rights do not apply to on-chain records. We will, however, respect your rights with respect to any off-chain personal data that we process.

### 12. Complaints

We take very seriously any complaints we receive about our use of Personal Information. If you have any questions, comments, requests or complaints regarding this Privacy Policy, or wish to discuss your data protection rights with us, please contact us using the information below.

### 13. Contact Us

To exercise any of your rights or if you have any questions or concerns about this Privacy Policy or our privacy practices, please contact us using the following information:

Email: <legal@qiro.fi>


