Skip to content

Quickstart ​

This page re-checks one KYI token lookup for an EVM token, a test token on Sepolia: first offline, then against the chain as of now.

Install a chain package ​

Install the package for the token's chain:

sh
npm install @bluprynt/sdk-chain-evm

For other chains, the steps are the same with a different package and rpcUrls key: @bluprynt/sdk-chain-solana with solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp (Solana), or @bluprynt/sdk-chain-xrpl with xrpl:0 and a wss:// URL (XRPL). To handle several chains with one call, see Reading the report.

Each package ships ESM and CommonJS builds with TypeScript types. The packages don't declare a Node version. The repository builds and tests them on Node 22 or later. Each chain package depends on its ecosystem's library: viem for EVM, @solana/kit and the token program clients for Solana, xrpl and ripple-keypairs for XRPL.

Fetch a lookup ​

Bluprynt's public API serves KYI token lookups at GET /kyi/v1/tokens. Look a token up by its CAIP-19 ID, or by address with an optional chain_slug. The request needs an API key; the API docs describe how to send it.

ts
const url = new URL("https://integrations.bluprynt.com/kyi/v1/tokens");
url.searchParams.set(
  "caip19",
  "eip155:11155111/erc20:0xcbc76ceb0afa037cbb975fd330bd683754998cc3",
);

const res = await fetch(url, {
  headers: { Authorization: process.env.BLUPRYNT_API_KEY ?? "" },
});
if (!res.ok) throw new Error(`KYI lookup failed: ${res.status}`);
const response = await res.json();

The response says whether the token passed KYI (kyi_verified). It also lists the token's authorities and the verifications that back them. Reading the report shows this lookup in full.

Verify offline ​

The values in the comments are for this Sepolia lookup.

ts
import { verifyKyiResponse } from "@bluprynt/sdk-chain-evm";

const report = await verifyKyiResponse(response);

report.claimed; // true: what Bluprynt says
report.evidence; // "confirmed"
report.verified; // true: what the re-checked proofs support
report.matchesClaim; // true: the two agree

With no options, the SDK makes no network calls. It checks each verification's proof: the signature recovers to the wallet, the wallet is the authority or one of its signers, and the authority is listed for the token.

  • evidence: confirmed when at least one verification is valid and no check is invalid. contradicted when a check is invalid. inconclusive otherwise.
  • verified: true only when the evidence is confirmed.
  • matchesClaim: whether verified agrees with claimed. It's null when Bluprynt claims the token is verified but the evidence is inconclusive.

These three are the offline summary. They cover signatures and the binding between wallet, authority and token, but not authorities on-chain or expiry. Don't show a badge from verified alone: Showing a badge explains which fields to use.

Each token's checks hold the steps behind these values. See Reading the report.

Check the chain as of now ​

Offline checks can't tell you whether an authority still controls the token. To read chain state, pass an RPC for the token's chain and ask for a moment:

ts
const report = await verifyKyiResponse(response, {
  rpcUrls: { "eip155:11155111": "https://sepolia.rpc.example.com" },
  at: ["now"],
});

report.at.now?.evidence; // the same summary, from the chain as of now
report.tokens[0]?.checks[0]?.at.now; // one check's result at that moment

The offline summary stays the same. report.at.now sums up what held as of now. For this lookup it is inconclusive, because its authority is controlled_by, which the SDK can't read on EVM. No RPC call is made: a signature reads no chain state either. Reading the report walks through it. To see at.now read real authorities, run the worked examples at a moment for EVM, Solana and XRPL.

You can also ask for "verified" (each record's own moment) or any Date. Moments explains which to use. RPC and errors covers RPC setup and what throws.

The snippets on this page aren't run by our tests. The same lookup is checked offline by a tested example on the EVM page.