> ## Documentation Index
> Fetch the complete documentation index at: https://yieldxyz.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# KYC

> Understand when RWA yields require off-chain identity verification and how eligibility is checked.

Some RWA products require the depositing address to be approved by the issuer, off-chain, before it can enter or exit. This is set per product, by the issuer, and is not a property of the RWA category as a whole: see [Issuers](/documentation/earn/rwas/coverage/issuers) for which products require it.

## When KYC applies

A yield's `mechanics.requirements.kycRequired` field is `true` when the issuer gates that product behind off-chain verification, and `false` or absent when it doesn't. Two products from the same issuer can differ: Midas sets `kycRequired: false` for mTBILL and mROX, and `true` for mGLO, mGLOBAL, and mF-ONE.

When `kycRequired` is `true`, the same object carries a `mechanics.requirements.kyc` block with the fields below.

## What the KYC metadata describes

| Field | Describes |
| - | - |
| `kycMode` | How the issuer's flow is delivered: `none`, `oauth_redirect`, `external_redirect`, `iframe`, `deeplink`, or `native_sdk` |
| `iframeAllowed` | Whether the issuer's KYC page can be embedded in an iframe |
| `authorizeUrl` | The issuer-hosted page to redirect the user to for onboarding, when the issuer provides one |
| `eligibility.defaultPolicy` | Whether an unlisted jurisdiction is allowed (`allow`) or denied (`deny`) by default |
| `eligibility.countries` / `blockedCountries` / `blockedSubdivisions` | The allow-list, block-list, and blocked subdivisions the issuer applies (ISO 3166-1 alpha-2, plus subdivision codes) |
| `eligibility.usPersonAllowed` | Whether a US person is eligible for this product |
| `eligibility.geoBlockingEnforced` | Whether yield.xyz enforces the country and subdivision lists against the caller's IP at action creation |
| `eligibility.investorEligibility` | Per-jurisdiction investor tiers the user must hold, each with its own required verification level |
| `eligibility.subjectTypes` | Whether the issuer accepts individual verification (`KYC`), business verification (`KYB`), or both |

The eligibility fields describe what the issuer's own metadata lists; yield.xyz does not add jurisdiction restrictions of its own beyond what a product's `eligibility` object states.

## Checking a wallet's status

`GET /v1/yields/{yieldId}/kyc/status` returns the wallet's normalized status for a specific yield, including yields that don't require KYC.

| `kycStatus` | Meaning |
| - | - |
| `not_required` | The yield is permissionless |
| `not_started` | KYC is required and the wallet hasn't begun the issuer's flow |
| `pending` | Declared for onboarding that is awaiting the issuer's review; no current issuer returns it |
| `approved` | The wallet is allowlisted and can transact |
| `rejected` | The issuer has declined the wallet |

A yield with `kycRequired: false` can still return `rejected` when its module screens addresses against an on-chain deny-list, as Dinari USD+ does.

The response also carries `authorizeUrl`, optionally, when the issuer provides an onboarding page. It typically appears with `not_started` or `rejected` and can be absent. For the request flow, see [Check RWA eligibility](/guides/earn/rwas/check-eligibility) and [Get KYC status](/api-reference/KycController_getStatus).

## Eligibility and actions

A gated yield's `enter` and `exit` actions run the same eligibility check the issuer enforces on-chain. If the address isn't allowlisted, the action request fails with `412 Precondition Failed` before any transaction is built, carrying the address, the issuer, and the `authorizeUrl` to complete verification when the issuer has one. This is a safety net: check `/kyc/status` ahead of the request to render the right state rather than relying on the rejection.

<Note>
  When a product's `eligibility.geoBlockingEnforced` is `true`, yield.xyz also checks the caller's IP against that product's country and subdivision lists, independent of wallet allowlisting. A request from a blocked region gets `403 Forbidden`, not `412`.
</Note>

## Next steps

<Columns cols={2}>
  <Card title="Issuers" icon="building-columns" href="/documentation/earn/rwas/coverage/issuers">
    See which issuers and products require KYC.
  </Card>

  <Card title="Actions" icon="bolt" href="/documentation/earn/core-concepts/actions">
    Request enter, exit, and manage actions, and handle a failed request.
  </Card>
</Columns>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.