> For the complete documentation index, see [llms.txt](https://docs.onre.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.onre.finance/for-capital-providers/onyc-primary-redemptions.md).

# ONyc Primary Redemptions

Primary redemption allows eligible ONyc holders to submit an onchain request for redemption directly through OnRe.

Unlike an RFQ or secondary-market sale, a primary redemption is not an immediate swap. ONyc is transferred to the redemption vault and an onchain claim is created for protocol fulfillment. Requests are asynchronous and may be fulfilled partially over one or more transactions.

### Primary Redemption vs. Immediate Liquidity

<table data-header-hidden="false" data-header-sticky><thead><tr><th width="113.0859375"></th><th>Primary Redemption</th><th>Immediate Onchain Liquidity</th></tr></thead><tbody><tr><td>Mechanism</td><td>Onchain redemption request</td><td>RFQ or secondary-market swap</td></tr><tr><td>Execution</td><td>Asynchronous</td><td>Atomic when a route is available</td></tr><tr><td>Eligibility</td><td>Subject to onboarding and jurisdictional requirements</td><td>Subject to the interface or venue used</td></tr><tr><td>Pricing</td><td>Prevailing offer price when each fulfillment executes</td><td>Executable quote at transaction execution</td></tr><tr><td>Settlement</td><td>May be partially fulfilled</td><td>Completed within the transaction</td></tr></tbody></table>

**Important:** Submitting a primary redemption request does not execute an immediate sale or lock a USD redemption value. For immediate execution mechanics, see [Redemptions and Onchain Liquidity Paths](/technical-resources/redemptions-and-onchain-liquidity-paths.md).

### Eligibility and Capacity

Primary redemptions are available to verified ONyc holders who satisfy applicable onboarding, investor-eligibility and jurisdictional requirements. Payouts are limited to wallets verified during onboarding.

Holders may select a supported settlement asset, currently USDC or USDG where available. OnRe targets maintaining a Liquidity Layer equal to 15% of total AUM to support liquidity needs and monthly primary-redemption capacity of up to 2.5% of ONyc SA NAV.

These are operational targets, not guaranteed redemption capacity. Actual capacity and fulfillment timing may vary with portfolio and liquidity conditions.

### How to Submit a Primary Redemption

Primary redemptions are available to eligible ONyc holders through the OnRe platform.

To initiate a redemption, the holder connects an eligible verified wallet, selects a supported settlement asset and submits a redemption request for the desired ONyc amount.

When submitted, `create_redemption_request` transfers the specified ONyc to the redemption vault and creates an on-chain request for protocol fulfillment. The request remains open until it is fully fulfilled or cancelled and may be fulfilled across one or more transactions.

The redemption price is not fixed at submission. Each fulfillment is priced at the prevailing ONyc offer price when that fulfillment executes.

### Redemption Lifecycle

{% code overflow="wrap" %}

```mermaid
stateDiagram-v2
    [*] --> Pending: create_redemption_request
    Pending --> PartiallyFulfilled: partial fulfillment
    PartiallyFulfilled --> PartiallyFulfilled: further partial fulfillment
    Pending --> Closed: full fulfillment or cancellation
    PartiallyFulfilled --> Closed: final fulfillment or cancellation of remainder
    Closed --> [*]
```

{% endcode %}

A primary redemption follows this process:

1. The holder chooses a supported settlement asset.
2. The application reads the `RedemptionOffer`, including its fee, disabled state and next request counter.
3. `create_redemption_request` transfers ONyc from the holder to the redemption vault and creates a request PDA.
4. The request remains open until a protocol worker fulfills it or it is cancelled under the program rules.
5. Fulfillment may occur in one or more transactions.
6. The request account closes after full fulfillment or cancellation.

### Pricing While a Request is Open

Primary redemption is priced at the prevailing offer price when each fulfillment occurs, not when the request is submitted.

Submitting a request therefore does not lock a USD redemption value. Any unfulfilled position remains economically exposed to ONyc SA until it is processed, and NAV may change during that period.

If a request is fulfilled across multiple transactions, each portion is priced when that fulfillment executes. An estimated fulfillment time is therefore an estimate rather than a guaranteed price or settlement date.

### Onchain Request Model

#### Redemption Offer

The redemption market is identified by an ordered pair:

```typescript
const [redemptionOfferPda] = PublicKey.findProgramAddressSync(
  [
    Buffer.from("redemption_offer"),
    onycMint.toBuffer(),
    settlementMint.toBuffer(),
  ],
  programId
);
```

The `RedemptionOffer` account includes:

* token-in and token-out mints;
* requested and executed redemption totals;
* primary-redemption fee;
* next request counter;
* redemption-vault target;
* disabled state.

The applicable fee should be read onchain. The online application currently charges 20 basis points on fulfilled primary redemptions, but fees may change.

#### Redemption Request

The request PDA is derived from the redemption offer and request ID:

```typescript
const requestId = redemptionOffer.requestCounter as BN;
const requestIdLe = requestId.toArrayLike(Buffer, "le", 8);

const [redemptionRequestPda] = PublicKey.findProgramAddressSync(
  [
    Buffer.from("redemption_request"),
    redemptionOfferPda.toBuffer(),
    requestIdLe,
  ],
  programId
);
```

The request records:

* the redemption offer;
* request ID;
* redeemer;
* requested ONyc amount;
* amount fulfilled so far

#### Submit a Request

{% code overflow="wrap" %}

```typescript
await program.methods
  .createRedemptionRequest(new BN(amountOnycBaseUnits.toString()))
  .accounts({
    state,
    redemptionOffer: redemptionOfferPda,
    offer: reverseMintOffer,
    redemptionRequest: redemptionRequestPda,
    redeemer: wallet.publicKey,
    redemptionVaultAuthority,
    tokenInMint: onycMint,
    redeemerTokenAccount,
    vaultTokenAccount,
    tokenProgram,
    associatedTokenProgram,
    systemProgram,
  })
  .rpc();
```

{% endcode %}

Use the release IDL to construct the exact account list.

ONyc is the redemption token-in mint. The normal mint offer used for pricing runs in the opposite direction, for example USDC → ONyc.

#### Track a Request

While the request account exists:

* `fulfilled_amount == 0` → Pending
* `0 < fulfilled_amount < amount` → Partially fulfilled

Do not assume that an open request will be fulfilled in a single transaction.

The program closes the account after full fulfillment or cancellation. A missing request account therefore indicates that the request is closed, but account absence alone does not indicate whether it was fulfilled or cancelled. Applications that need to distinguish between these outcomes should index program events or the request's transaction history.

#### Cancellation

A pending request, or the remaining unfulfilled portion of a partially fulfilled request, can be cancelled under the program's cancellation rules. Cancellation closes the request account and returns the applicable locked ONyc. Any portion that has already been fulfilled cannot be reversed.

### Liquidity and Fulfillment

The redemption vault holds settlement assets used to fulfill primary redemption requests.

Before fulfillment, the program checks available liquidity. If the vault cannot support the required payment, the fulfillment transaction reverts and the request remains open.

RFQ buy-side activity can refill the redemption vault up to its configured TVL-based target. Net inflow above the target is routed to a separate proceeds vault, and fees are not counted as refill. The configured target is a liquidity-management mechanism. It does not reserve settlement assets for an individual request or guarantee a completion date.

For detailed redemption-vault refill and RFQ mechanics, see [Redemptions and Onchain Liquidity Paths](/technical-resources/redemptions-and-onchain-liquidity-paths.md).

### Operational Controls

Primary redemption creation, fulfillment and cancellation stop when the global kill switch is active. A redemption market can also be disabled independently.

Applications should distinguish between:

* Redemptions paused – the global kill switch is active.
* Market unavailable – the relevant redemption offer is disabled.
* Waiting for liquidity – a valid open request cannot currently be fulfilled because sufficient settlement liquidity is unavailable.

### Frequently Asked Questions

**What can I receive in a primary redemption?**\
USDC or USDG, depending on the redemption market and available liquidity shown in the application.

**Who can use primary redemption?**\
Verified ONyc holders who satisfy applicable onboarding, investor-eligibility and jurisdictional requirements. Payouts are limited to wallets verified during onboarding.

**Is the redemption price fixed when I submit?**\
No. Primary fulfillment uses the prevailing ONyc offer price when each fulfillment executes.

**Can a request be partially fulfilled?**\
Yes. The request remains onchain with an updated `fulfilled_amount` until the remaining amount is fulfilled or cancelled.

**Can I cancel a redemption request?**\
A pending request, or the unfulfilled remainder of a partially fulfilled request, may be cancelled under the program's cancellation rules. Amounts already fulfilled cannot be reversed.

**What happens to fulfilled ONyc?**\
The program burns it when the program controls the mint, or routes it according to the configured custody model. Settlement transfers and the corresponding ONyc handling occur atomically within each fulfillment transaction.

**What if I am not eligible for primary redemption?**\
Available RFQ or secondary-market liquidity may be used instead, subject to the rules and availability of the relevant interface or venue.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.onre.finance/for-capital-providers/onyc-primary-redemptions.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
