chitin-cert

Issue and verify on-chain certificates on Base L2. Register as an issuer, mint achievement/capability/compliance certs as NFTs, and verify them from anywhere.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "chitin-cert" with this command: npx skills add EijiAC24/chitin-cert

Chitin Cert — Verifiable On-Chain Certificates

Issue verifiable credentials to any agent or wallet on Base L2. Each certificate is minted as a non-transferable NFT, permanently stored on Arweave, and verifiable by anyone.

Skill file: https://certs.chitin.id/skill.md

Why Chitin Cert

  • Permanent — Arweave storage + Base L2 NFT. Cannot be faked, deleted, or transferred.
  • Verifiable — Anyone can verify a cert via API or on-chain, no trust required.
  • 7 cert types — Achievements, capabilities, compliance, audits, partnerships, and more.
  • Batchable — Up to 100 certs in a single transaction.
  • Soul-linked — Optionally bind a cert to a Chitin SBT for deeper identity anchoring.

Base URL

https://certs.chitin.id/api/v1

🔒 Security: Never send your wallet private key to any domain. API key (ck_...) is for cert issuance only — treat it as sensitive.


Cert Types

TypeUse For
achievementMilestones, wins, accomplishments
capabilityVerified skills and abilities
complianceSecurity audits, regulatory approvals
infrastructureDeployment verifications, uptime records
partnershipCollaborations, endorsements between parties
auditThird-party reviews, code audits
customAnything else

Setup: Become an Issuer

Two steps before you can issue certs. Both require a wallet signature to prove ownership.

Step 1: Register as Issuer

Build a signed message in the format Chitin Certs: Register issuer {address_lowercase} at {timestamp_ms} (timestamp = Date.now() in milliseconds, must be within ±5 minutes).

curl -X POST https://certs.chitin.id/api/v1/issuers \
  -H "Content-Type: application/json" \
  -d '{
    "address": "0xYOUR_WALLET",
    "name": "Your Organization",
    "description": "Optional: what you certify",
    "url": "https://your-site.example.com",
    "signature": "0x...",
    "message": "Chitin Certs: Register issuer 0xyour_wallet at 1740000000000",
    "timestamp": 1740000000000
  }'

Response:

{
  "success": true,
  "data": {
    "id": "iss_1740000000_abc123",
    "address": "0xyour_wallet",
    "name": "Your Organization",
    "trustTier": "unverified",
    "certCount": 0,
    "createdAt": "2026-02-20T00:00:00Z"
  }
}

Save your issuer id — needed for API key generation.

Step 2: Generate API Key

Build a signed message: Chitin Certs: Generate API key for {issuerId} at {timestamp_ms}

curl -X POST https://certs.chitin.id/api/v1/auth \
  -H "Content-Type: application/json" \
  -d '{
    "issuerId": "iss_1740000000_abc123",
    "name": "production-key",
    "signature": "0x...",
    "message": "Chitin Certs: Generate API key for iss_1740000000_abc123 at 1740000000000",
    "timestamp": 1740000000000
  }'

Response:

{
  "success": true,
  "data": {
    "apiKey": "ck_abc123...",
    "name": "production-key",
    "createdAt": "2026-02-20T00:00:00Z"
  }
}

Save your apiKey — returned only once.


Issue a Certificate

curl -X POST https://certs.chitin.id/api/v1/certs \
  -H "Authorization: Bearer ck_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "issuerAddress": "0xYOUR_WALLET",
    "recipientAddress": "0xRECIPIENT",
    "certType": "achievement",
    "title": "First Deployment on Base",
    "description": "Successfully deployed and operated a live service on Base L2.",
    "tags": ["base", "deployment", "milestone"],
    "evidence": "https://basescan.org/tx/0x..."
  }'

Response:

{
  "success": true,
  "data": {
    "tokenId": 2,
    "txHash": "0x...",
    "arweaveTxId": "abc123...",
    "certType": "achievement",
    "recipient": "0xrecipient",
    "isTBA": false
  }
}

Field Reference

FieldRequiredDescription
issuerAddressYour registered issuer wallet address
recipientAddressRecipient's wallet address
certTypeOne of the 7 cert types
titleCert title (max 200 chars)
descriptionOptionalLonger explanation
tagsOptionalString array for categorization
evidenceOptionalURL to proof/supporting material
expiresAtOptionalISO 8601 expiry (e.g. "2027-01-01T00:00:00Z")
passportRegistryOptionalERC-8004 registry address for passport-linked certs
passportTokenIdOptionalRecipient's ERC-8004 token ID
soulRegistryOptionalChitinSoulRegistry address for soul-linked certs
soulTokenIdOptionalRecipient's Chitin SBT token ID
extensionOptionalArbitrary JSON object for custom metadata

Soul-linked Cert

Link directly to a Chitin soul for the strongest identity binding:

{
  "issuerAddress": "0xYOUR_WALLET",
  "recipientAddress": "0xRECIPIENT",
  "certType": "capability",
  "title": "Verified Autonomous Agent",
  "soulRegistry": "0x4DB94aD31BC202831A49Fd9a2Fa354583002F894",
  "soulTokenId": 42
}

Batch Issue (Up to 100 Certs)

curl -X POST https://certs.chitin.id/api/v1/certs/batch \
  -H "Authorization: Bearer ck_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "issuerAddress": "0xYOUR_WALLET",
    "certs": [
      {
        "recipientAddress": "0xADDR_1",
        "certType": "achievement",
        "title": "Hackathon Winner"
      },
      {
        "recipientAddress": "0xADDR_2",
        "certType": "capability",
        "title": "Verified Code Auditor",
        "description": "Passed the Chitin code audit track"
      }
    ]
  }'

Response:

{
  "success": true,
  "data": {
    "tokenIds": [3, 4],
    "txHash": "0x...",
    "count": 2
  }
}

Read & Verify Certs

Get cert details

curl https://certs.chitin.id/api/v1/certs/2

Verify on-chain status

curl https://certs.chitin.id/api/v1/verify/2

Response:

{
  "tokenId": 2,
  "isValid": true,
  "isRevoked": false,
  "issuer": "0x...",
  "recipient": "0x...",
  "certType": "achievement",
  "issuedAt": 1740000000
}

List certs by recipient

curl "https://certs.chitin.id/api/v1/certs?passport=0xRECIPIENT"

List certs by issuer

curl "https://certs.chitin.id/api/v1/certs?issuer=0xYOUR_WALLET"

List by ERC-8004 passport

curl "https://certs.chitin.id/api/v1/certs?passportRegistry=0x8004A169FB4a3325136EB29fA0ceB6D2e539a432&passportTokenId=42"

Webhooks

Get notified when certs are minted under your issuer:

curl -X POST https://certs.chitin.id/api/v1/webhooks \
  -H "Authorization: Bearer ck_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-server.example.com/webhook",
    "events": ["cert.minted"]
  }'

Payload:

{
  "event": "cert.minted",
  "tokenId": 2,
  "txHash": "0x...",
  "arweaveTxId": "...",
  "certType": "achievement",
  "issuer": "0x...",
  "recipient": "0x..."
}

MCP Server

For AI assistants that support MCP, use issue_cert and verify_cert tools directly:

npx -y chitin-mcp-server

Endpoints Reference

EndpointMethodAuthDescription
/issuersPOSTWallet sigRegister as issuer
/issuers?address=0x...GETNoneLook up issuer
/authPOSTWallet sigGenerate API key
/certsPOSTAPI keyIssue a cert
/certs/batchPOSTAPI keyBatch issue (max 100)
/certs/{certId}GETNoneGet cert details
/certs?passport=0x...GETNoneList by recipient
/certs?issuer=0x...GETNoneList by issuer
/verify/{certId}GETNoneVerify on-chain
/metadata/{tokenId}GETNoneERC-721 metadata
/metadata/{tokenId}/image.svgGETNoneCert SVG image
/webhooksPOSTAPI keyRegister webhook

Contracts (Base Mainnet, Chain ID: 8453)

ContractAddress
CertRegistry (Proxy)0x9694Fde4dBb44AbCfDA693b645845909c6032D4d
CertRegistry (Impl V4)0xDc487e6ef33220177c3EBAFC71B5aF2FDb2ce0DF
ChitinSoulRegistry0x4DB94aD31BC202831A49Fd9a2Fa354583002F894

About Chitin Cert

Chitin Cert is the credential layer of the Chitin Protocol. Your Chitin soul is your identity. Your certs are your verified history.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.