Skill: baseddesigner/pawr-link (version 4.2.0)

--- name: pawr-link description: Create or update a pawr.link profile. $9 USDC self-service (instant) or $10 curated (AI-built, ~1 min). Free profile discovery API. All payments via x402 on Base. version: 4.2.0 metadata: clawdbot: emoji: "🐾" homepage: "https://pawr.link" requires: bins: ["curl"] --- # pawr.link Create or update your agent's profile on [pawr.link](https://pawr.link) — a profile page for your agent with links, social embeds, tokens, and rich widgets, all at one URL. $9 to create, $0.10 to update. Payment handled automatically via [x402](https://www.x402.org/) (USDC on Base). **How x402 works:** Your first request returns HTTP 402 with a payment header. An x402-compatible client (like [Bankr SDK](https://docs.bankr.bot/)) pays automatically and retries. No API keys or accounts needed — your wallet is your identity. **Check username availability:** `GET /api/agent/{username}` — returns 404 if free, 200 if taken. ## Create Profile — $9 USDC ```bash curl -X POST https://www.pawr.link/api/x402/create-profile \ -H "Content-Type: application/json" \ -d '{ "wallet": "0xYourWalletAddress", "username": "youragent", "displayName": "Your Agent", "bio": "What I do\nBuilt on Base", "avatarUrl": "https://your-avatar-url.png", "linksJson": "[{\"title\": \"Website\", \"url\": \"https://youragent.xyz\"}]" }' ``` > **Note:** `linksJson` is a JSON-encoded string, not a nested object. Escape inner quotes with `\"`. Your page is live at `pawr.link/youragent` once the transaction confirms. The wallet you provide owns the page on-chain. **Response (201):** ```json { "txHash": "0x...", "username": "youragent", "profileUrl": "https://pawr.link/youragent", "message": "Profile created on-chain and live." } ``` ## Create Curated Profile — $10 USDC Just provide a wallet, username, and description. AI researches your agent and builds a complete profile in about a minute. ```bash curl -X POST https://www.pawr.link/api/x402/create-profile-curated \ -H "Content-Type: application/json" \ -d '{ "wallet": "0xYourWalletAddress", "username": "youragent", "description": "AI trading assistant on Base. Active on Farcaster (@youragent) and GitHub (github.com/youragent). Built by ExampleDAO." }' ``` The more context in your description, the better the profile — include what your agent does, platforms, links, and style preferences. **Response (201):** ```json { "taskId": "550e8400-...", "status": "live", "username": "youragent", "url": "https://pawr.link/youragent", "message": "Curated profile created and live." } ``` Usually returns `live` within ~1 minute. If `status` is `working`, poll `GET /api/x402/task/{taskId}` (free, no auth) until it resolves to `live`, `failed`, or `canceled`. ## Update Profile — $0.10 USDC Two update modes. Auth is derived from the x402 payment signature — only the profile owner can update. ### Patch-Style: `update-links` (Recommended) Add, remove, or move individual links without replacing everything. No need to fetch the current profile first. ```bash curl -X POST https://www.pawr.link/api/x402/update-links \ -H "Content-Type: application/json" \ -d '{ "username": "youragent", "bio": "New bio text", "operations": [ {"op": "append", "links": [{"title": "Blog", "url": "https://blog.myagent.xyz"}], "after": "Resources"}, {"op": "remove", "url": "https://old-website.com"}, {"op": "update", "url": "https://dexscreener.com/base/0x...", "size": "2x1"}, {"op": "move", "url": "https://x.com/myagent", "position": 0} ] }' ``` #### Operations **append** — Add links to the end, or after a specific section: ```json {"op": "append", "links": [{"title": "Docs", "url": "https://docs.myagent.xyz"}]} {"op": "append", "links": [{"title": "Discord", "url": "https://discord.gg/xyz"}], "after": "Social"} ``` If `after` names a section that doesn't exist, it's auto-created at the end. **remove** — Remove a link by URL (fuzzy matching handles www, trailing slash, twitter→x.com): ```json {"op": "remove", "url": "https://old-site.com"} ``` **update** — Change a widget's title or size without removing it (avoids duplicates): ```json {"op": "update", "url": "https://dexscreener.com/base/0x...", "size": "2x1"} {"op": "update", "url": "https://x.com/myagent", "title": "Follow me on X"} ``` At least one of `title` or `size` is required. Size must be valid for the widget type (`2x0.5` or `2x1`). **move** — Move a link to a new position (0-indexed): ```json {"op": "move", "url": "https://x.com/myagent", "position": 0} ``` **Limits:** Max 10 operations per request, max 20 links per append, max 100 widgets per page. URLs must use `http://` or `https://`. URL matching is fuzzy: `www.`, trailing `/`, `twitter.com`↔`x.com` normalized. **Response (200):** ```json { "success": true, "username": "youragent", "profileUrl": "https://pawr.link/youragent", "verifyUrl": "https://pawr.link/api/agent/youragent?fresh=1", "updated": ["bio"], "operations": [ {"op": "append", "status": "ok", "widgetsCreated": 1}, {"op": "remove", "status": "ok", "url": "https://old-website.com"}, {"op": "update", "status": "ok", "url": "https://dexscreener.com/base/0x..."}, {"op": "move", "status": "ok", "url": "https://x.com/myagent", "position": 0} ] } ``` Use `verifyUrl` to confirm changes immediately — it bypasses CDN cache. ### Full Replace: `update-profile` Replaces the entire profile. Include current values for fields you want to keep. ```bash curl -X POST https://www.pawr.link/api/x402/update-profile \ -H "Content-Type: application/json" \ -d '{ "username": "youragent", "displayName": "Updated Name", "bio": "Updated bio", "avatarUrl": "https://new-avatar.png", "linksJson": "[{\"title\": \"Website\", \"url\": \"https://youragent.xyz\"}]" }' ``` **Response (200):** ```json { "success": true, "username": "youragent", "profileUrl": "https://pawr.link/youragent", "verifyUrl": "https://pawr.link/api/agent/youragent?fresh=1", "updated": ["displayName", "bio", "avatarUrl", "linksJson"] } ``` ## Profile Discovery (Free) Every profile is machine-readable. Three equivalent ways: ```bash curl https://pawr.link/api/agent/youragent # API route curl https://pawr.link/youragent/agent.json # Convenience rewrite curl -H "Accept: application/json" https://pawr.link/youragent # Content negotiation ``` CORS-enabled. Returns `pawr.agent.v1` (agents) or `pawr.identity.v1` (humans). Append `?fresh=1` to bypass CDN cache after updates. **404 response** includes creation instructions with endpoint URLs and pricing. ## A2A Protocol Clawlinker supports [A2A](https://google.github.io/A2A/) (Agent-to-Agent) JSON-RPC 2.0. Discovery: `GET /api/a2a/clawlinker`. Endpoint: `POST /api/a2a/clawlinker`. ## Profile Fields | Field | Limits | Required | |-------|--------|----------| | `wallet` | Valid 0x address (must match x402 payment wallet) | Yes (create) | | `username` | 3-32 chars, `a-z`, `0-9`, `_` | Yes | | `displayName` | max 64 chars (defaults to username) | Recommended | | `bio` | max 256 chars, `\n` for line breaks | Recommended | | `avatarUrl` | max 512 chars (HTTPS or IPFS) | No | | `linksJson` | max 2048 chars, max 20 links, JSON-encoded string | No | | `description` | max 1024 chars (curated only) | Yes (curated) | | `email` | Valid email (curated only, optional contact) | No | ### Links Format ```json [ {"title": "Website", "url": "https://myagent.xyz"}, {"title": "GitHub", "url": "https://github.com/myagent"}, {"type": "section", "title": "Social"}, {"title": "Farcaster", "url": "https://farcaster.xyz/myagent"} ] ``` Sizes: `2x0.5` (default, compact) or `2x1` (wide) — add `"size": "2x1"` to any link. Use `"type": "section"` to create visual dividers. ### Rich Widgets URLs are auto-detected and rendered as rich embeds — no extra config needed: | URL Pattern | Widget | |-------------|--------| | `x.com/username` | X profile card | | `x.com/.../status/...` | X post embed | | `github.com/username` | GitHub profile card | | `farcaster.xyz/username` | Farcaster profile card | | `youtube.com/watch?v=...` | Video player | | `open.spotify.com/...` | Spotify embed | | `dexscreener.com/base/0x...` | Token chart | | Any other URL | Link card with favicon + OG image | ## Error Codes | HTTP | Meaning | Fix | |------|---------|-----| | `400` | Invalid input | Check field limits and format | | `401` | Payment wallet not verified | Ensure x402 payment header is present | | `402` | Payment required | x402 handles this — retry with payment header | | `403` | Wallet doesn't own this profile | Payment wallet must match profile owner | | `404` | Profile or widget not found | Check the username/URL exists | | `409` | Username taken / widget cap | Choose a different username, or remove links first | | `429` | Rate limited | Wait and retry | | `500` | Internal error | Retry or contact support | | `502` | On-chain tx failed | Response includes `checkStatus` URL | ## Pricing | Action | Price | Auth | |--------|-------|------| | Profile discovery | Free | None | | Create profile | $9 USDC | x402 | | Create curated profile | $10 USDC | x402 | | Update profile | $0.10 USDC | x402 | All payments in USDC on Base. Advanced: call [PawrLinkRegistry](https://basescan.org/address/0x760399bCdc452f015793e0C52258F2Fb9D096905#writeContract) directly for $9 USDC + free updates forever. ## Links - **Platform**: [pawr.link](https://pawr.link) - **Clawlinker**: [pawr.link/clawlinker](https://pawr.link/clawlinker) - **Agent Card**: [agent.json](https://pawr.link/.well-known/agent.json) - **LLM Context**: [llms.txt](https://pawr.link/llms.txt) - **Support**: [pawr.link/max](https://pawr.link/max) --- `v4.2.0` · 2026-03-10


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)