DraftCheck for AI agents

Check whether a draft sounds AI-written before you publish it. Your agent pays $0.01 USDC per check on Base over x402 (HTTP 402 Payment Required). No account, API key, card or human sign-off.

Endpoint: POST https://slopscore-nine.vercel.app/api/x402/check
Price: $0.01 USDC per call (10000 units, 6 decimals)
Network: Base mainnet (eip155:8453), USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Pays to: 0xC5017d7541e82D8416229A07C52a1a35c7204855 (DraftCheck receive wallet)
Scheme: exact (EIP-3009 transferWithAuthorization, gasless for the payer). Facilitator: PayAI.
Machine-readable: GET https://slopscore-nine.vercel.app/api/x402/check (price, input and output JSON Schema), /.well-known/x402, and the bazaar extension in every 402.

How it works

  1. POST your text with no payment. You get 402 Payment Required, and the base64 JSON in the PAYMENT-REQUIRED header lists the accepted payment (scheme, network, amount, asset, payTo).
  2. Your x402 client signs a USDC authorization for exactly that amount and retries the same request with a PAYMENT-SIGNATURE header.
  3. DraftCheck checks the payment with the facilitator, runs the check and settles. The response is 200 with the result, and the PAYMENT-RESPONSE header carries the settlement receipt (transaction hash).

If your input is bad (missing text, empty, over 200,000 chars), you get 400 and the payment is not settled, so you aren't charged.

Input and output

The input and output match the free POST /api/check. The paid endpoint takes up to 200,000 characters; the free one stops at 5,000.

// request body
{"text": "In today's fast-paced world, AI isn't just a tool, it's a mirror."}

// 200 response
{"score": 83, "label": "Pure slop", "words": 62, "tell_count": 12,
 "by_pattern": {"inflated_significance": {"label": "Inflated significance", "count": 1}},
 "matches": [{"id": "inflated_significance", "label": "Inflated significance",
   "start": 160, "end": 182, "text": "plays a crucial role",
   "hint": "Keep the fact, drop the claim that it marks a turning point."}]}

score runs from 0 (no tells) to 100. Each match gives the character offsets of a tell and a hint for fixing it.

See the 402 (no payment)

curl -i -X POST https://slopscore-nine.vercel.app/api/x402/check \
  -H 'content-type: application/json' -d '{"text":"hello"}'
# HTTP/2 402 ... payment-required: eyJ4NDAyVmVyc2lvbiI6Mi...

Pay and call (Node, official x402 client)

npm i @x402/fetch @x402/evm viem

import { wrapFetchWithPaymentFromConfig, decodePaymentResponseHeader } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.AGENT_WALLET_KEY); // the agent's own wallet, holding Base USDC
const pay = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
const res = await pay("https://slopscore-nine.vercel.app/api/x402/check", {
  method: "POST", headers: { "content-type": "application/json" },
  body: JSON.stringify({ text: draft }),
});
console.log(await res.json());
console.log(decodePaymentResponseHeader(res.headers.get("PAYMENT-RESPONSE"))); // receipt

Any x402 v2 client works (Python x402, Go, or an agent wallet with x402 support). The agent's wallet only needs USDC on Base. It doesn't need ETH, because the facilitator pays gas.

Other ways in

DraftCheck flags writing patterns. It can't prove who or what wrote a text. Payments are final once settled on-chain. Questions: slopscore@agentmail.to.