Integrate: five things you can just take

All five tools are free and open — embed them anywhere. Verification and issuance always resolve back to JIAOZI servers. Ordered by effort: the first takes 30 seconds.

1. Live badge — 30 seconds

One line of Markdown for your README or site. The image is rendered live by our servers: red-and-white “alive” while valid, amber “suspended” if locked, black “revoked” the moment it's revoked — viewers always see the current truth, never a stale screenshot.

JIAOZI JIAOZI-2026-000027

Markdown (swap in your credential ID):

[![JIAOZI](https://www.jiaozi.io/api/badge/JIAOZI-2026-000027.svg)](https://www.jiaozi.io/certs/JIAOZI-2026-000027)

Or HTML:

<a href="https://www.jiaozi.io/certs/JIAOZI-2026-000027">
  <img src="https://www.jiaozi.io/api/badge/JIAOZI-2026-000027.svg" alt="JIAOZI JIAOZI-2026-000027" height="28" />
</a>

2. Embeddable verifier — 2 minutes

Two lines of code embed a live credential status card into any page: the script finds every data-jiaozi-verify element and renders it. Status is signed live by JIAOZI servers (60-second-TTL signed status credential) — the host page cannot fake it, and revocation shows immediately.

Embed code (swap in your credential ID):

<script src="https://www.jiaozi.io/verify-widget.js" async></script>
<div data-jiaozi-verify="JIAOZI-2026-000027"></div>

Want more personality? Add one attribute for the JIAOZI Guardian skin — it scans while verifying, jumps when alive, shakes its head when revoked:

<div data-jiaozi-verify="JIAOZI-2026-000027" data-jiaozi-style="guardian"></div>

Or an iframe alternative (if you'd rather not add a script):

<iframe src="https://www.jiaozi.io/embed/JIAOZI-2026-000027"
  width="340" height="150" style="border:0" title="JIAOZI verify"></iframe>
<!-- 守门人皮肤 guardian skin: -->
<iframe src="https://www.jiaozi.io/embed/JIAOZI-2026-000027?style=guardian"
  width="340" height="480" style="border:0" title="JIAOZI verify"></iframe>

Consistency rule: the card's styling, copy and status colors are not customizable — it looks identical on every site, exactly as on our portals. Green=alive / red=revoked means the same everywhere; that is both a brand rule and an anti-spoofing requirement. The only option is the skin (plain card / Guardian).

Universal verification: data-jiaozi-verify also accepts a full did:web. JIAOZI-issued DIDs render the normal status card; any other did:web gets a neutral grey-blue standards-conformance card (DID resolution, document validity, keys present — explicitly not a JIAOZI endorsement). No JIAOZI credential required.

Live demo (both below are the widget itself; the right one wears the Guardian skin):

3. Verify snippet — 5 minutes

Give your site or agent the power to check someone's credential. Both endpoints are public, no key needed: resolve returns the credential record; status returns an Ed25519-signed, 60-second-TTL live status credential (active / suspended / revoked / unknown). For high-value operations, fail closed: no valid credential, no deal.

Command line:

curl "https://www.jiaozi.io/api/resolve?q=JIAOZI-2026-000027"

JavaScript (browser or Node):

// 任何网站/后端都能贴:查凭证 + 验活状态(公开端点,无需密钥)
const certId = "JIAOZI-2026-000027";
const status = await fetch("https://www.jiaozi.io/api/status/" + certId).then(r => r.json());

if (status.payload?.status === "active") {
  console.log("凭证有效,信任等级:", status.payload.trustLevel);
} else {
  // suspended(锁定)/ revoked(吊销)/ unknown(查无此证)→ 按你的风险策略拒绝
  console.warn("凭证状态:", status.payload?.status);
}
// 凭证由 Ed25519 签名、60 秒有效期;验签公钥: GET https://www.jiaozi.io/api/status-key

4. SDK — half an hour

Wraps resolve / verify / attest into four methods. JavaScript and Python, mapping 1:1 to the API: npm install @jiaozi-protocol/sdk, pip install jiaozi-gdid.

TypeScript / JavaScript:

import { Gdid } from "@jiaozi-protocol/sdk";

const gdid = new Gdid({ coreUrl: "https://www.jiaozi.io", apiKey: process.env.JIAOZI_API_KEY });

await gdid.resolve("JIAOZI-2026-000027");   // 查凭证
await gdid.verify("did:web:...");      // 验真伪
await gdid.attest(summary);            // 提交体检摘要发证

Python:

from jiaozi_gdid import Gdid

g = Gdid(core_url="https://www.jiaozi.io", api_key="YOUR_KEY")
g.resolve("JIAOZI-2026-000027")
g.verify("did:web:...")
g.attest(summary_dict)

5. Validator — your path to a credential

An open-source CLI that examines your agent on your own machine: computes the sha256 code-metric hash, runs checks, and emits a jiaozi.attest.v1 summary. Privacy rule: source code never leaves your machine — only digests and hashes travel. Add --boundary-file to declare a behavior boundary (permissions / objectives / constraints, aligned with China's GB/Z 185.3).

# 1) 安装(本地运行,源码永不上传)
python -m pip install jiaozi-validator

# 2) 生成主人密钥(私钥自持、永不上传;任何装有 Node.js 的机器)
node -e "const c=require('crypto'),f=require('fs');const{publicKey,privateKey}=c.generateKeyPairSync('ed25519');f.writeFileSync('owner.pem',privateKey.export({type:'pkcs8',format:'pem'}),{mode:0o600});const d=publicKey.export({type:'spki',format:'der'});f.writeFileSync('owner.pub','z'+d.subarray(d.length-32).toString('base64url')+'\n');console.log('written: owner.pem (private, keep safe) + owner.pub')"

# 3) 本地体检,先看看摘要长什么样(不提交)
jiaozi-validator --agent-name MyAgent --path ./my-agent --owner-pubkey-file owner.pub --dry-run

# 4) 正式提交发证(需要 X-Jiaozi-Key,试运行期免费申领)
export JIAOZI_API_KEY=your-key
jiaozi-validator --agent-name MyAgent --path ./my-agent --owner-pubkey-file owner.pub \
  --boundary-file ./boundary.json \
  --api-url https://www.jiaozi.io/api/verify

A successful submission returns your credential ID (JIAOZI-YYYY-NNNNNN) and did:web identity. Resubmitting the same key + same code never double-issues — it idempotently returns the existing credential, so retries are safe.

Which portal do I submit to?

Operators in mainland China submit via jiaozi.tech (Q Jupiter Technology intake, PRC rules); everyone else via jiaozi.io (Singapore intake). Credentials are identical either way — all are issued and stored by the Singapore node. Machine entry: /llms.txt.