Quickstart
Two ways to pay. One meter.
util.beauty is a focused utility API — browser rendering and crypto primitives — priced in credits (1 credit = $0.001). Agents pay per request with x402 (USDC on Base). Teams buy prepaid credits with a card or USDC and call with an API key.
What you get
- Browser: screenshot, PDF, extract, snapshot, inspect — public web only.
- Crypto: hash, HMAC, random, password, signatures, AEAD, JWT, TOTP, KDF — never logged or stored.
- Honest metering: bodies validated free; after payment the charge stands even if the target page fails.
- Live catalog: never invent prices — always GET /v1/meta.
Path A · Agent (x402)
No account. Wallet with USDC on Base (chain 8453).
No ETH for gas — EIP-3009 transferWithAuthorization; the facilitator submits the tx.
Utilities run about $0.001–$0.007 per call.
Claude Code skill
mkdir -p ~/.claude/skills/util-beauty && \
curl -fsSL https://util.beauty/skill.md \
-o ~/.claude/skills/util-beauty/SKILL.md
Any agent harness
curl https://util.beauty/prompt.txt
Paste into the system prompt of any harness that can run shell or Node.
Node (~60s)
npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactEvmScheme, toClientEvmSigner } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
import { createPublicClient, http } from "viem";
import { base } from "viem/chains";
const account = privateKeyToAccount(process.env.X402_PRIVATE_KEY);
const signer = toClientEvmSigner(
account,
createPublicClient({ chain: base, transport: http("https://mainnet.base.org") }),
);
const client = new x402Client().register("eip155:8453", new ExactEvmScheme(signer));
const paidFetch = wrapFetchWithPayment(fetch, client);
const res = await paidFetch("https://util.beauty/v1/crypto/hash", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({ function: "sha256", input: "hello" }),
});
console.log(await res.json());
First request gets 402; the wrapper signs and retries.
Settlement tx hash returns in X-PAYMENT-RESPONSE.
Preview prices free: GET /v1/x402/quote?utility=crypto.hash.
Path B · Prepaid (teams)
API key + credit balance. Best for dashboards, CI, and repeated team use. Self-serve today:
- Card (recommended for humans): open /credits, pick a bundle, pay with Stripe. You receive an API key once on the success page.
-
USDC (x402):
POST /v1/system/register(1 credit) for a key, thenPOST /v1/credits/purchasewith{"sku":"builder"}— or purchase alone to create account + key + credits in one step.
curl -sS -X POST https://util.beauty/v1/crypto/hash \
-H "Authorization: Bearer $UB_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"function":"sha256","input":"hello"}'
Bundles: starter (1k/$1) · builder (5k/$4.50) · scale (25k/$20) · pro (100k/$70). Catalog: /v1/credits/bundles.
Billing rules
VALIDATION_ERRORis free — body checked before payment.- After payment, the charge stands even if execution fails (dead URL, crypto error, etc.).
- Always send
Idempotency-Keyon paid calls (duplicate → 409, no second charge). - x402 settles on Base mainnet before your handler runs; tx hash on success and error.
MCP
Thin discover-then-call server: list_utilities →
describe_utility →
call_utility. Install configs on
/mcp.
export X402_PRIVATE_KEY=0x...
npx -y util-beauty-mcp