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.
Scanned 9/5/2026
Install to Claude Code
npx -y skills add dvcrn/openclaw-skills-marketplace --skill pawr-link --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Pawr Link?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/dvcrn-pawr-link)More formats (shields.io, HTML) on the badges page.
---
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."
---
# 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
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!