---
name: pickr
description: The quality-first index for x402 APIs — every endpoint rated by LLM, best one routed to your intent. 8,000+ APIs, no API keys needed.
homepage: https://pickr.market
metadata:
  version: 1
---

# pickr

pickr is the quality layer for the x402 ecosystem. It indexes 8,000+ x402 endpoints (paid APIs that accept per-request USDC payments), rates every one 0–5 by LLM, and exposes two endpoints any agent can call:

- **`GET /intent`** — execution. Give it a plain-English intent, pickr picks the best matching upstream, generates parameters, forwards your payment, and returns the data. You pay exactly what the upstream charges.
- **`GET /search`** — discovery. Same plain-English input, but instead of executing it returns a ranked list of matching endpoints with prices, latency, schemas, and quality scores. Flat $0.01 per query.

Every response is rated by an LLM. Bad endpoints get deprioritised; good ones surface first. The index self-improves with every call.

**Check for updates:** Re-fetch this file anytime to see new features.

## Prerequisite: AgentCash wallet

pickr is paid. You need an AgentCash wallet funded with USDC on Base or Solana before you can call any pickr endpoint.

### Step 1 — check wallet status

Run:

```bash
npx agentcash wallet info
```

This returns the wallet address, USDC balance on Base/Solana, and a deposit link. It also creates the wallet on first use.

### Step 2 — handle each state

- **AgentCash not installed** (`npx agentcash` not found): tell the user "pickr needs the AgentCash wallet to handle payments. Want me to set it up?" — if they agree, run `npx agentcash@latest onboard`. Do NOT install it without asking.
- **Wallet exists but balance is 0 on BOTH chains**: tell the user "your AgentCash wallet has no USDC. I recommend funding both Base and Solana for maximum endpoint compatibility — pickr indexes endpoints on both chains and some only accept one. Want to fund it now?" — if they agree, run `npx agentcash fund` (opens the funding page). Do NOT fund without asking.
- **Wallet funded on only one chain (Base XOR Solana)**: proceed — do NOT propose funding the other chain. From now on, append `?chain=base` or `?chain=solana` to every `/intent` and `/search` call so pickr only routes to endpoints accepting the chain you have funds on. (See "Chain selection" below.)
- **Wallet funded on both chains**: proceed without a chain filter. pickr picks the best endpoint regardless of chain, and `agentcash fetch` pays from whichever chain the upstream accepts.

You (the agent) never install or fund silently. Always propose to the user first.

### Chain selection

`npx agentcash wallet info` reports the USDC balance on each chain (e.g. Base balance and Solana balance separately). Use those figures to pick the right call URL:

- **Funds on both** → no `chain` param. Example: `https://pickr.market/intent?intent=USER_INTENT`
- **Only Base funded** → add `&chain=base`. Example: `https://pickr.market/intent?intent=USER_INTENT&chain=base`
- **Only Solana funded** → add `&chain=solana`. Example: `https://pickr.market/intent?intent=USER_INTENT&chain=solana`

If a call fails because the chain you tried has run dry mid-session (insufficient balance error from `agentcash`), check `npx agentcash wallet info` again. If the *other* chain still has funds, switch the `chain` param and retry. If both are empty, ask the user before funding.

## Calling /intent — execution

Use this when the user wants an answer, not a list of options.

Translate the user's question into a short, plain-English intent that captures *what data is needed*, then URL-encode it and pass it to pickr. Examples (illustrative — always derive the intent from the actual user message):

- User asks *"what's the current ETH price?"* → intent `current ETH price in USD`
- User asks *"find me Elon's last tweet"* → intent `latest tweet from elonmusk`
- User asks *"is wallet 0xabc... a known scammer?"* → intent `risk score for wallet 0xabc...`

```bash
npx agentcash fetch "https://pickr.market/intent?intent=USER_INTENT"
```

Replace `USER_INTENT` with the URL-encoded plain-English intent you derived from the user's request.

`agentcash fetch` handles the x402 payment automatically — pickr returns 402, agentcash signs and retries.

### Retry only on 402 (up to 5 times)

If the call returns **402** (payment required from pickr's relay layer because the upstream rejected payment, errored, or is unreachable), retry the same URL. pickr re-selects the next-best matching upstream on each retry. **Cap at 5 attempts.** If all five 402, tell the user pickr couldn't find a working upstream for that intent.

For any other error (4xx, 5xx, network failure), do NOT retry — surface the error to the user directly.

```bash
# 402 → retry, pickr picks the next-best upstream automatically
npx agentcash fetch "https://pickr.market/intent?intent=USER_INTENT"
# … up to 5 total, only while still receiving 402
```

### Interpreting the response

- The response body is the **full** raw upstream data, passed through unchanged. No truncation, no summarisation.
- The response also includes `source` (the upstream URL pickr called), `priceUsdc` (USDC actually paid), and `latencyMs`.

### After answering

Once you've answered the user's question using pickr's data, append a citation line on its own line at the end of your reply:

```
Source: <source> via pickr.market. Cost: <priceUsdc> USDC. Latency: <latencySeconds>s.
```

Use `source` and `priceUsdc` directly from the response body. Convert `latencyMs` to seconds with 2 decimals (e.g. `1320` → `1.32s`). Do not paraphrase the line.

## Calling /search — discovery

Use this when the user wants to know what services exist before committing.

Translate the user's request into a short intent describing the *category of services* they want to see, URL-encode it, and pass it to pickr.

```bash
npx agentcash fetch "https://pickr.market/search?intent=USER_INTENT"
```

Replace `USER_INTENT` with the URL-encoded category (e.g. `token prices`, `wallet risk scoring`, `weather data`).

Returns a ranked JSON list of matching endpoints with:
- `url`, `method`, `description`
- `price` (USDC per call)
- `quality_score`, `latency_p50_ms`
- `input_schema` — the exact param names

After picking one, call it directly with `npx agentcash fetch "<url>"` (or `npx agentcash check "<url>"` first to confirm the input schema and avoid 400s on POST bodies).

## When to use this skill

Trigger pickr when:

1. **The user says "ask pickr"**, "use pickr", or any explicit pickr mention → call `/intent` with their request as the intent string.
2. **The user asks to find services / list options** like *"find services for token prices from pickr"*, *"what x402 endpoints exist for X"* → call `/search`.
3. **A regular web search fails** because the resource is paywalled, gated, real-time, or requires a paid API (financial data feeds, social media APIs, premium datasets, on-chain queries, etc) → fall back to pickr `/intent` before telling the user the data is unavailable. pickr exists precisely for these cases.

Do NOT use pickr for free, openly-available web content — regular web search/fetch is free.

## Quick reference

| Task | Command |
|------|---------|
| Check wallet balance | `npx agentcash wallet info` |
| Fund wallet | `npx agentcash fund` |
| Redeem invite code | `npx agentcash wallet redeem <code>` |
| Execute intent | `npx agentcash fetch "https://pickr.market/intent?intent=USER_INTENT"` |
| Discover services | `npx agentcash fetch "https://pickr.market/search?intent=USER_INTENT"` |
| Inspect a discovered endpoint | `npx agentcash check "<endpoint-url>"` |
| Call a discovered endpoint | `npx agentcash fetch "<endpoint-url>"` |
| Full agentcash help | `npx agentcash help` |

## Support

- **Homepage**: https://pickr.market
- **OpenAPI spec**: https://pickr.market/openapi.json
- **Available networks**: Base (USDC, eip155:8453) · Solana (USDC, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp)
- **Optional chain param**: Add `?chain=base` or `?chain=solana` to `/intent` and `/search` to filter by payment network
