PacStac Skill
Everything an agent needs to use the PacStac trust network. No install required — all endpoints are public REST APIs at pacstac.com.
Skill Package
Download Skill PackageThe .skill package contains everything your agent needs: a SKILL.md with workflows and a JSON reference with full API schemas for all 10 endpoints.
Package contents:
pacstac/SKILL.md
pacstac/references/pacstac-skill.json
API Endpoints
10 public REST endpoints at https://pacstac.com. No auth required.
/v1/verifyCheck whether a wallet controls a domain, ENS name, X handle, YouTube channel, Instagram account, GitHub account, GitLab account, NPM package, PyPI package, Hugging Face repository, OCI image repository, Bluesky profile, LinkedIn profile, or OpenClaw agent. Supports point-in-time queries and freshness constraints.
Input: wallet (chain + address), asset (type + ref), optional asOf, optional require (maxAgeSeconds, notRevoked)
/v1/wallet/{address}Returns trust score, network membership, active status, and namespace information. Free tier returns basic data; detail='full' returns premium data (trust level, total points, verified counts, namespace breakdown) via x402 payment.
Input: address, optional detail ('basic' | 'full')
/api/v1/walletsLook up multiple wallets in a single request. Same data as lookupWallet but batched for efficiency. Returns results array with per-wallet metadata.
Input: addresses (array, 1-100), optional detail ('basic' | 'full')
/api/v1/wallet/{address}/attestationReturns a signed attestation containing the wallet's trust level, total points, active status, and namespace count. Includes an Ed25519 signature and JWKS URL for independent verification. Attestations have a 1-hour TTL.
Input: address
/v1/attestations/{id}Retrieve a specific attestation by its unique ID. Returns the full attestation payload with signature for verification.
Input: attestationId
/v1/bindings/{id}/eventsGet the verification and attestation event history for a specific binding. Supports cursor-based pagination for large histories.
Input: bindingId, optional cursor (datetime), optional limit (1-200)
/v1/.well-known/jwks.jsonReturns the JSON Web Key Set used to verify attestation signatures. Use this to independently validate that attestations were signed by PacStac.
Input: (none)
/api/v1/x402/infoReturns x402 micropayment protocol configuration: pricing tiers, supported payment networks, SDK references, and endpoint details for premium API access.
Input: (none)
/api/v1/openclaw/bindCreates a binding for an OpenClaw agent. Returns a verifyToken and the challenge messageToSign. The agent (or user) signs the message with their wallet, then calls openclawVerify.
Input: wallet (required), agentName (optional)
/api/v1/openclaw/verifySubmit the signed challenge message to complete verification. If status is ALREADY_VERIFIED (HTTP 409), the agent is already verified — treat as success.
Input: agentName, wallet, message, signature, token
SKILL.md
---
name: pacstac
description: PacStac trust network skill. Verify wallet-to-asset stewardship, look up wallet trust data, fetch signed attestations, and check binding events. No install required — all endpoints are public REST APIs at pacstac.com.
---
# PacStac Skill
No install required. All endpoints are public REST APIs at `https://pacstac.com`.
## API Endpoints
| Endpoint | Method | What it does |
|----------|--------|-------------|
| `/v1/verify` | POST | Verify wallet ↔ asset (domain, ENS, X, YouTube, Instagram, OpenClaw) |
| `/v1/wallet/{address}` | GET | Look up wallet trust data (free basic / paid full) |
| `/api/v1/wallets` | POST | Batch look up up to 100 wallets |
| `/api/v1/wallet/{address}/attestation` | GET | Fetch signed trust attestation for a wallet |
| `/v1/attestations/{id}` | GET | Fetch attestation by ID |
| `/v1/bindings/{id}/events` | GET | Fetch binding verification events |
| `/v1/.well-known/jwks.json` | GET | Fetch JWKS for signature verification |
| `/api/v1/x402/info` | GET | Fetch x402 payment protocol info |
| `/api/v1/openclaw/bind` | POST | Create an OpenClaw agent binding |
| `/api/v1/openclaw/verify` | POST | Verify an OpenClaw agent binding |
## Common Workflows
**Check if a wallet controls a domain:**
`POST /v1/verify` with `{ wallet: { chain, address }, asset: { type: "domain", ref: { domain: "example.com" } } }`
**Look up wallet trust score:**
`GET /v1/wallet/{address}`
**Get verifiable proof of trust:**
`GET /api/v1/wallet/{address}/attestation` — returns signed attestation with Ed25519 signature
**Onboard an OpenClaw agent:**
1. `POST /api/v1/openclaw/bind` with `{ wallet }` → get verifyToken + messageToSign
2. Sign the messageToSign with the wallet
3. `POST /api/v1/openclaw/verify` with `{ agentName, wallet, message, signature, token }`
## Reference
Full API schemas: `references/pacstac-skill.json`
API Reference (JSON)
{
"name": "pacstac-skill",
"version": "4.0.0",
"description": "PacStac trust network skill. Verify wallet-to-asset stewardship, look up wallet trust data, fetch signed attestations, and check binding events. No install required — all endpoints are public REST APIs.",
"baseUrl": "https://pacstac.com",
"endpoints": [
{
"name": "verify",
"description": "Verify wallet ↔ asset stewardship. Supports domain, ENS, X, YouTube, Instagram, and OpenClaw.",
"method": "POST",
"url": "https://pacstac.com/v1/verify",
"inputSchema": {
"type": "object",
"required": [
"wallet",
"asset"
],
"properties": {
"wallet": {
"type": "object",
"required": [
"chain",
"address"
],
"properties": {
"chain": {
"type": "string",
"description": "Chain identifier (e.g. 'ethereum', 'solana')."
},
"address": {
"type": "string",
"description": "Wallet address."
}
}
},
"asset": {
"type": "object",
"required": [
"type",
"ref"
],
"description": "Asset to verify. type is one of: domain, ens, x, youtube, instagram, farcaster, github, gitlab, npm, pypi, huggingface, oci, bluesky, linkedin, stackoverflow, email, openclaw. ref contains the asset identifier (e.g. { domain: 'example.com' }).",
"properties": {
"type": {
"type": "string",
"enum": [
"domain",
"ens",
"x",
"youtube",
"instagram",
"farcaster",
"github",
"gitlab",
"npm",
"pypi",
"huggingface",
"oci",
"bluesky",
"linkedin",
"stackoverflow",
"email",
"openclaw"
]
},
"ref": {
"type": "object",
"description": "Asset reference — key depends on type: domain, name, handle, channelHandle, username, or agentName."
}
}
},
"asOf": {
"type": "string",
"format": "date-time",
"description": "Optional point-in-time query."
},
"require": {
"type": "object",
"properties": {
"maxAgeSeconds": {
"type": "integer",
"description": "Max age of verification in seconds."
},
"notRevoked": {
"type": "boolean",
"description": "Require binding is not revoked."
}
}
}
}
}
},
{
"name": "lookupWallet",
"description": "Look up wallet trust data and namespace information. Free tier returns basic data; detail='full' for premium (requires x402 payment).",
"method": "GET",
"url": "https://pacstac.com/v1/wallet/{address}",
"inputSchema": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "Wallet address (EVM 0x... or Solana base58)."
},
"detail": {
"type": "string",
"enum": [
"basic",
"full"
],
"description": "'basic' (free) or 'full' (premium)."
}
}
}
},
{
"name": "batchLookupWallets",
"description": "Batch look up multiple wallets (up to 100). Free tier returns basic data; detail='full' for premium.",
"method": "POST",
"url": "https://pacstac.com/api/v1/wallets",
"inputSchema": {
"type": "object",
"required": [
"addresses"
],
"properties": {
"addresses": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 100,
"description": "Array of wallet addresses."
},
"detail": {
"type": "string",
"enum": [
"basic",
"full"
],
"description": "'basic' (free) or 'full' (premium)."
}
}
}
},
{
"name": "getWalletAttestation",
"description": "Fetch a signed trust-level attestation for a wallet. Returns trust tier, points, and Ed25519 signature.",
"method": "GET",
"url": "https://pacstac.com/api/v1/wallet/{address}/attestation",
"inputSchema": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "Wallet address (EVM 0x... or Solana base58)."
}
}
}
},
{
"name": "getAttestation",
"description": "Fetch a signed attestation by its ID.",
"method": "GET",
"url": "https://pacstac.com/v1/attestations/{attestationId}",
"inputSchema": {
"type": "object",
"required": [
"attestationId"
],
"properties": {
"attestationId": {
"type": "string",
"minLength": 3,
"description": "Attestation ID."
}
}
}
},
{
"name": "getBindingEvents",
"description": "Fetch binding verification/attestation events with pagination.",
"method": "GET",
"url": "https://pacstac.com/v1/bindings/{bindingId}/events",
"inputSchema": {
"type": "object",
"required": [
"bindingId"
],
"properties": {
"bindingId": {
"type": "string",
"minLength": 3,
"description": "Binding ID."
},
"cursor": {
"type": "string",
"format": "date-time",
"description": "Pagination cursor (datetime)."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "Max events to return."
}
}
}
},
{
"name": "getJwks",
"description": "Fetch JWKS public keys for verifying attestation signatures.",
"method": "GET",
"url": "https://pacstac.com/v1/.well-known/jwks.json",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "getX402Info",
"description": "Fetch x402 payment protocol info including pricing, supported networks, and SDK references.",
"method": "GET",
"url": "https://pacstac.com/api/v1/x402/info",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "openclawBind",
"description": "Create an OpenClaw agent binding. Returns a verifyToken and challenge message to sign.",
"method": "POST",
"url": "https://pacstac.com/api/v1/openclaw/bind",
"inputSchema": {
"type": "object",
"required": [
"wallet"
],
"properties": {
"agentName": {
"type": "string",
"description": "Agent name/label (optional, defaults to wallet-based name)."
},
"wallet": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "EVM wallet address (0x format)."
}
}
}
},
{
"name": "openclawVerify",
"description": "Submit signed challenge to verify an OpenClaw agent binding. ALREADY_VERIFIED (HTTP 409) means success.",
"method": "POST",
"url": "https://pacstac.com/api/v1/openclaw/verify",
"inputSchema": {
"type": "object",
"required": [
"agentName",
"wallet",
"message",
"signature",
"token"
],
"properties": {
"agentName": {
"type": "string",
"description": "Agent name."
},
"wallet": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "EVM wallet address."
},
"message": {
"type": "string",
"description": "The messageToSign from the bind step."
},
"signature": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{130}$",
"description": "Wallet signature of the challenge message (65 bytes, 0x hex)."
},
"token": {
"type": "string",
"description": "The verifyToken from the bind step."
}
}
}
}
]
}