Quickstart
The first walk a distributor takes with Yutai, using only these docs: get a key, install the web SDK, read a holder's benefits, and show the seal the benefits module draws, all on your own page.
Get a key
Every call to Yutai's distributor API presents one key, and you make it yourself in the developer console, with nothing to ask of anyone at Yutai. Start there: create your developer account, then create your platform and mint a key on the Keys page. One account signs in to every platform you work on, and no key exists before you create one.
Create a secret key for the call in the third step. It calls Yutai from your own server, and it is shown once, when it is created, and can never be shown again, so store it on the server and keep it out of code a browser loads.
A publishable key is the one for code a browser loads. It can be shown again at any time in the console, and it presents only from the origins you list for it, including a page hosted outside yutai.com.
The API reference names the key a call presents and what one key may call.
Install the web SDK
Add this one script tag to the page that draws Yutai's elements, once, ahead of any element it writes:
The script tag<script src="https://app.yutai.com/sdk/v1/yutai-sdk-web.min.js"></script>The script registers Yutai's elements, and each element's attributes and tokens are documented on its own page: the credential card page carries the card's.
Read a holder's benefits
Paste this call where your page runs its server code, with the placeholder replaced by the key from the first step. The answer carries the wallet's holdings and the benefits each holding reaches.
The call to pasteimport { connectDistributorApi } from "@yutai/sdk-web"; const client = connectDistributorApi({ base: "https://api.yutai.com", key: "ytk_your-key" }); const answer = await client.askEligibility(["0x5aaf3fd78c9f0bd2c39c3b8b1f443ec8d1a5244b"]);The call is the exact one the example wallet page runs and prints, and that page draws the same wallet's answer as a list, so you can see the shape before you wire your own screen.
Beneath it, the sample answer the API's own document carries for this read: the document's own example, with its own example wallet, never a live read.
The sample answer for GET /v1/eligibility{ "wallets": [ { "wallet": "0xabc0000000000000000000000000000000000001", "read": true, "sourceMode": "SIMULATED", "asOf": "2026-10-08T12:00:00.000Z", "tokens": [ { "issuer": null, "security": { "name": "Sample Global Holdings", "isin": "US0000000009", "ticker": "SGH" }, "symbol": "SGHon", "chainName": "chiliz-testnet", "wrapper": "Sample token programme", "chain": "eip155:88880", "shares": "15", "daysHeld": 452, "tier": "Tier 2", "credentialTier": "Tier 2", "progress": { "nextTier": "Tier 3", "daysHeld": 452, "progressPercent": 11 }, "source": "defi:kamino", "positions": [ { "location": "wallet", "units": "10", "countsForEligibility": true }, { "location": "kamino_supplied", "units": "2", "countsForEligibility": true }, { "location": "kamino_collateral", "units": "4", "countsForEligibility": true }, { "location": "kamino_borrowed", "units": "-1", "countsForEligibility": false } ], "breakdown": "In wallet 10, lent on Kamino 6, borrowed 1.", "benefits": [ { "benefitId": "bft_01K4V9QG000000000000000001", "name": "Sample lounge access", "type": "ACCESS", "delivery": "VENUE_REDEMPTION", "state": "eligible", "illustrative": true, "scope": "base", "funder": "YUTAI" } ] } ] }, { "wallet": "0xdef0000000000000000000000000000000000002", "read": false, "sourceMode": "SIMULATED", "unreadReason": "Yutai has not read this wallet yet." } ] }Show the seal
Hand the answer to the benefits module: the element draws one row per token, the benefits each holding reaches beneath it, and the claim sheet runs end to end inside the element, so no key reaches the browser.
Sample figures: a simulated holder's tokens and benefits, not a real holder's. The element's markup and its attributes are documented on the benefits module page.