Skip to content
Back to skills

Chitin Cert

ASecurity

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.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
securityrustgobashapisecurity

Works with

  • api
  • mcp

Security analysis

A96/100
  • mediumUses curl or wget to download content

Pro scans all 4 files and shows the line behind each finding

Scanned November 11, 2026

npx -y skills add johnalbertini14-glitch/openclaw-skills --skill chitin-cert --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Chitin Cert?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Chitin Cert
[![Security: A โ€” Skills Directory](https://www.skillsdirectory.com/api/skills/johnalbertini14-glitch-chitin-cert/badge)](https://www.skillsdirectory.com/skills/johnalbertini14-glitch-chitin-cert)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: chitin-cert
version: 1.0.0
description: 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.
homepage: https://certs.chitin.id
metadata: {"emoji":"๐Ÿ“œ","category":"credentials","api_base":"https://certs.chitin.id/api/v1"}
---

# 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

| Type | Use For |
|------|---------|
| `achievement` | Milestones, wins, accomplishments |
| `capability` | Verified skills and abilities |
| `compliance` | Security audits, regulatory approvals |
| `infrastructure` | Deployment verifications, uptime records |
| `partnership` | Collaborations, endorsements between parties |
| `audit` | Third-party reviews, code audits |
| `custom` | Anything 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).

```bash
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:
```json
{
  "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}`

```bash
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:
```json
{
  "success": true,
  "data": {
    "apiKey": "ck_abc123...",
    "name": "production-key",
    "createdAt": "2026-02-20T00:00:00Z"
  }
}
```

**Save your `apiKey` โ€” returned only once.**

---

## Issue a Certificate

```bash
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:
```json
{
  "success": true,
  "data": {
    "tokenId": 2,
    "txHash": "0x...",
    "arweaveTxId": "abc123...",
    "certType": "achievement",
    "recipient": "0xrecipient",
    "isTBA": false
  }
}
```

### Field Reference

| Field | Required | Description |
|-------|----------|-------------|
| `issuerAddress` | โœ… | Your registered issuer wallet address |
| `recipientAddress` | โœ… | Recipient's wallet address |
| `certType` | โœ… | One of the 7 cert types |
| `title` | โœ… | Cert title (max 200 chars) |
| `description` | Optional | Longer explanation |
| `tags` | Optional | String array for categorization |
| `evidence` | Optional | URL to proof/supporting material |
| `expiresAt` | Optional | ISO 8601 expiry (e.g. `"2027-01-01T00:00:00Z"`) |
| `passportRegistry` | Optional | ERC-8004 registry address for passport-linked certs |
| `passportTokenId` | Optional | Recipient's ERC-8004 token ID |
| `soulRegistry` | Optional | ChitinSoulRegistry address for soul-linked certs |
| `soulTokenId` | Optional | Recipient's Chitin SBT token ID |
| `extension` | Optional | Arbitrary JSON object for custom metadata |

### Soul-linked Cert

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

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

---

## Batch Issue (Up to 100 Certs)

```bash
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:
```json
{
  "success": true,
  "data": {
    "tokenIds": [3, 4],
    "txHash": "0x...",
    "count": 2
  }
}
```

---

## Read & Verify Certs

### Get cert details

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

### Verify on-chain status

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

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

### List certs by recipient

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

### List certs by issuer

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

### List by ERC-8004 passport

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

---

## Webhooks

Get notified when certs are minted under your issuer:

```bash
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:
```json
{
  "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:

```bash
npx -y chitin-mcp-server
```

---

## Endpoints Reference

| Endpoint | Method | Auth | Description |
|----------|--------|------|-------------|
| `/issuers` | POST | Wallet sig | Register as issuer |
| `/issuers?address=0x...` | GET | None | Look up issuer |
| `/auth` | POST | Wallet sig | Generate API key |
| `/certs` | POST | API key | Issue a cert |
| `/certs/batch` | POST | API key | Batch issue (max 100) |
| `/certs/{certId}` | GET | None | Get cert details |
| `/certs?passport=0x...` | GET | None | List by recipient |
| `/certs?issuer=0x...` | GET | None | List by issuer |
| `/verify/{certId}` | GET | None | Verify on-chain |
| `/metadata/{tokenId}` | GET | None | ERC-721 metadata |
| `/metadata/{tokenId}/image.svg` | GET | None | Cert SVG image |
| `/webhooks` | POST | API key | Register webhook |

---

## Contracts (Base Mainnet, Chain ID: 8453)

| Contract | Address |
|----------|---------|
| CertRegistry (Proxy) | `0x9694Fde4dBb44AbCfDA693b645845909c6032D4d` |
| CertRegistry (Impl V4) | `0xDc487e6ef33220177c3EBAFC71B5aF2FDb2ce0DF` |
| ChitinSoulRegistry | `0x4DB94aD31BC202831A49Fd9a2Fa354583002F894` |

---

## 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.

- Certificates: [certs.chitin.id](https://certs.chitin.id)
- Identity: [chitin.id](https://chitin.id)
- MCP Server: [chitin.id/docs/mcp](https://chitin.id/docs/mcp)

Files in this skill

  • _meta.json276 B
  • llms.txt3.1 KB
  • skill.json2.8 KB
  • skill.md8.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in security โ†’

Comments

Loading commentsโ€ฆ

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.