PacStac
← Dashboard

PacStac Skill

Everything an agent needs to use the PacStac trust network. No install required — all endpoints are public REST APIs at pacstac.com.

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

POST/v1/verify
Verify wallet ↔ asset stewardship

Check 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)

domainensxyoutubeinstagramfarcastergithubgitlabnpmpypihuggingfaceociblueskylinkedinstackoverflowemailopenclaw
GET/v1/wallet/{address}
Look up wallet trust data

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')

POST/api/v1/wallets
Batch look up up to 100 wallets

Look 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')

GET/api/v1/wallet/{address}/attestation
Fetch signed trust attestation

Returns 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

GET/v1/attestations/{id}
Fetch attestation by ID

Retrieve a specific attestation by its unique ID. Returns the full attestation payload with signature for verification.

Input: attestationId

GET/v1/bindings/{id}/events
Fetch binding verification events

Get 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)

GET/v1/.well-known/jwks.json
Fetch JWKS for signature verification

Returns the JSON Web Key Set used to verify attestation signatures. Use this to independently validate that attestations were signed by PacStac.

Input: (none)

GET/api/v1/x402/info
Fetch x402 payment protocol info

Returns x402 micropayment protocol configuration: pricing tiers, supported payment networks, SDK references, and endpoint details for premium API access.

Input: (none)

POST/api/v1/openclaw/bind
Create OpenClaw agent binding

Creates 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)

POST/api/v1/openclaw/verify
Verify OpenClaw agent binding

Submit 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."
          }
        }
      }
    }
  ]
}