Claude
Skills
Sign in
Back

capacitr

Included with Lifetime
$97 forever

Paste a URL or free text and get matched Polymarket / Hyperliquid / Deribit markets with Quotient edge scores. **Pay in $CAPACITR** over x402 on Base — real on-chain settlement via Coinbase facilitator (or USDC fallback when the agent's wallet doesn't hold $CAPACITR). Single paid endpoint, no signup, no skill key. Triggers: "analyze this link", "what's the trade here", "find markets for X", "research X on Polymarket".

Ads & Marketingmarketspolymarkethyperliquidderibitx402capacitrbasescripts

What this skill does


# capacitr

Market discovery as a single x402-paid HTTP call. Paste a URL or
sentence; get back ranked Polymarket / Hyperliquid / Deribit markets
with Quotient intelligence (fair odds, spread, BLUF) overlaid. One
endpoint, one payment, one response.

## Proven on-chain settlement

Verified end-to-end against both Coinbase and MetaMask facilitators on
Base mainnet. Each row is a real on-chain transfer to the Capacitr
payee `0x6503fB61705EB6B3C57EE1ab88a1a75A6eE01869`:

| Asset      | Method   | Facilitator      | Tx |
|------------|----------|------------------|----|
| USDC       | eip3009  | Coinbase CDP     | [`0x484cc8…398a`](https://basescan.org/tx/0x484cc87aa896bbabb73238fdcc97df84110cec4eb95c984d3802143f2242398a) |
| $CAPACITR  | permit2  | Coinbase CDP     | [`0xa6a8eb…5864`](https://basescan.org/tx/0xa6a8ebc4cde81f35a8a967c71f038f02de694c814ad0986997ff2f25c4815864) |
| $CAPACITR  | erc7710  | MetaMask CDP     | [`0xa286dd…066e`](https://basescan.org/tx/0xa286dd9127f9eb284d0a45b9effa96952ec46c6ff62106da2061f5aa99d3066e) |

Your agent platform signs the right primitive for the
`assetTransferMethod` declared in the 402 envelope; Capacitr routes
verify + settle to the matching facilitator. No further integration
required.

## Base URL

```bash
: "${CAPACITR_BASE_URL:=https://app.capacitr.xyz}"
```

## Always-on preflight

```bash
curl -sS "$CAPACITR_BASE_URL/api/skill/discovery" | jq .
```

Returns current prices, accepted assets, EIP-712 domain hints, and the
canonical `accepts[]` shape. Treat `prices_version` as the cache key —
if a later `402` carries a different `prices_version`, re-fetch
discovery before re-signing.

## The paid endpoint — `POST /api/analyze-link`

**Default: pay in $CAPACITR.** USDC supported as a fallback when the
agent's wallet doesn't hold $CAPACITR. All prices come from discovery
— never hard-code.

### Flow

1. POST without `X-Payment`. Expect `402` with `x402.accepts[]`.
2. **Prefer the `accepts[]` entry where `extra.symbol === "capacitr"`.**
   Fall back to USDC only if your wallet doesn't hold $CAPACITR on Base.

   ```bash
   # Pick CAPACITR if present, otherwise USDC
   accept=$(jq -r '.x402.accepts | (map(select(.extra.symbol == "capacitr"))[0] // map(select(.extra.symbol == "usdc"))[0])')
   ```
3. Read `accepts[].extra.assetTransferMethod` to know which signing
   primitive to use (see below). Sign with your wallet.
4. Retry with `X-Payment: <base64 JSON>` header → 200 + payload.

### Why $CAPACITR?

- Aligns agent payment with the token holders driving Capacitr's
  research surface — directly compounds protocol value rather than
  flowing out to a generic stablecoin.
- Lower per-call cost than USDC equivalent.
- Same on-chain settlement guarantees via Coinbase CDP (the
  `permit2 + eip2612GasSponsoring` flow chains `token.permit()` →
  `x402ExactPermit2Proxy.settleWithPermit()` and the facilitator pays
  gas — agent wallet only needs $CAPACITR balance, no ETH).

### Asset transfer methods

The 402 envelope declares **one** method per `accepts[]` entry. Pick
the entry whose method your wallet can sign:

```
accepts[i].extra.assetTransferMethod ∈ { "eip3009", "permit2", "erc7710" }
```

| Method      | Used for             | Signing                                                   |
|-------------|----------------------|-----------------------------------------------------------|
| **permit2** | **$CAPACITR (default)** | Two EIP-712 sigs: token `Permit` + Permit2 `PermitWitnessTransferFrom` |
| **erc7710** | $CAPACITR (operator may pick instead of permit2) | One delegation signed by a MetaMask Smart Account (or EIP-7702-upgraded EOA) |
| **eip3009** | USDC (fallback)      | One EIP-712 sig: `TransferWithAuthorization`              |

The operator picks at most one method per asset for $CAPACITR. If they
flip the operator switch, agents see the new method in the next 402
envelope.

### `permit2` — `$CAPACITR` via Coinbase (default)

Two signatures from any EOA. The facilitator chains
`token.permit(...)` → `x402ExactPermit2Proxy.settleWithPermit(...)` and
pays gas.

```
PERMIT2_CANONICAL     = 0x000000000022D473030F116dDEE9F6B43aC78BA3
X402_EXACT_PROXY      = 0x402085c248EeA27D92E8b30b2C58ed07f9E20001

# 1. EIP-2612 permit signature against the token
domain  = { name: <accepts.extra.name>, version: <accepts.extra.version>,
            chainId: 8453, verifyingContract: <accepts.asset> }
types   = { Permit: [
              {name: "owner",    type: "address"},
              {name: "spender",  type: "address"},
              {name: "value",    type: "uint256"},
              {name: "nonce",    type: "uint256"},
              {name: "deadline", type: "uint256"},
            ] }
message = { owner: <agent EOA>, spender: PERMIT2_CANONICAL,
            value: MAX_UINT256, nonce: <token.nonces(owner)>, deadline }

# 2. Permit2 PermitWitnessTransferFrom signature
domain  = { name: "Permit2", chainId: 8453,
            verifyingContract: PERMIT2_CANONICAL }
types   = { PermitWitnessTransferFrom: [
              {name: "permitted", type: "TokenPermissions"},
              {name: "spender",   type: "address"},
              {name: "nonce",     type: "uint256"},
              {name: "deadline",  type: "uint256"},
              {name: "witness",   type: "Witness"},
            ],
            TokenPermissions: [ {token, amount} ],
            Witness:          [ {to, validAfter} ] }
message = { permitted: { token, amount }, spender: X402_EXACT_PROXY,
            nonce: <random uint256>, deadline,
            witness: { to: accepts.payTo, validAfter } }
```

X-Payment payload shape:

```
{
  x402Version: 2,
  scheme: "exact",
  network: "eip155:8453",
  accepted: <copy of the chosen accepts[i] entry>,
  payload: {
    signature: <permit2 witness sig>,
    permit2Authorization: {
      permitted: { token, amount },
      from: <agent EOA>,
      spender: X402_EXACT_PROXY,
      nonce, deadline,
      witness: { to: payTo, validAfter }
    }
  },
  extensions: {
    eip2612GasSponsoring: {
      info: { from, asset, spender: PERMIT2_CANONICAL, amount: MAX_UINT256,
              nonce, deadline, signature: <permit sig>, version: "1" }
    }
  }
}
```

**Optimization:** If Permit2 already has MaxUint allowance from the
buyer (one-time approval), skip `extensions.eip2612GasSponsoring`.
Coinbase's simulator otherwise re-broadcasts a redundant permit and
reverts.

### `erc7710` — `$CAPACITR` via MetaMask

Requires the buyer wallet to be a **MetaMask Smart Account** or an
**EIP-7702-upgraded EOA** delegating to MetaMask's
`EIP7702StatelessDeleGatorImpl` (Base address
`0x63c0c19a282a1B52b07dD5a65b58948A07DAE32B`). Plain EOAs cannot use
this method.

```
# Build delegation via @metamask/smart-accounts-kit
const delegation = createOpenDelegation({
  from: buyerSmartAccount.address,
  environment: buyerSmartAccount.environment,
  salt: <unique uint256>,                 // prevents allowance-bucket reuse
  scope: { type: ScopeType.Erc20TransferAmount,
           tokenAddress: accepts.asset, maxAmount: accepts.amount },
  caveats: [{ type: CaveatType.Redeemer,
              redeemers: accepts.extra.facilitators }],
});
const signature = await buyerSmartAccount.signDelegation({ delegation });
const permissionContext = encodeDelegations([{ ...delegation, signature }]);
```

X-Payment payload shape:

```
{
  x402Version: 2,
  scheme: "exact",
  network: "eip155:8453",
  accepted: <copy of the chosen accepts[i] entry>,
  payload: {
    delegationManager: buyerSmartAccount.environment.DelegationManager,
    permissionContext,            // ABI-encoded signed delegation bytes
    delegator: buyerSmartAccount.address,
  }
}
```

### `eip3009` — USDC (fallback)

Use only when the agent's wallet doesn't hold $CAPACITR on Base. EIP-712
typed-data domain (read from `accepts[].extra` rather than hard-coding):

```
domain   = { name: "USD Coin", version: "2", chainId: 8453,
             verifyingContract: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 }
prima
Files: 6
Size: 27.7 KB
Complexity: 68/100
Category: Ads & Marketing

Related in Ads & Marketing