1. Try it free with curl (no account, key or wallet)
curl https://jeveryword.vercel.app/v1/extract \
-H 'Content-Type: application/json' \
-d '{
"text": "Hi, I am Maya Chen. Reach me at maya@fern.example",
"fields": [
{"id": "name", "description": "The speaker full name."},
{"id": "email", "description": "The speaker email address."}
]
}'
It answers with exact substrings, offsets and a probability for each field
{
"results": {
"name": { "status": "extracted", "value": "Maya Chen",
"start": 9, "end": 18, "probability": 1 },
"email": { "status": "extracted", "value": "maya@fern.example",
"start": 32, "end": 49, "probability": 1 }
},
"calls": 1, "inputTokens": 1095, "durationMs": 418
}
For PII, post {"text": "…"} to /v1/pii. Text can be up to 4,000 characters, with up to 16 fields.
2. After the free calls, pay per call from code
npm install @x402/fetch @x402/evm viem
import { wrapFetchWithPayment } from '@x402/fetch';
import { x402Client } from '@x402/core/client';
import { ExactEvmScheme } from '@x402/evm/exact/client';
import { privateKeyToAccount } from 'viem/accounts';
const account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);
const client = new x402Client();
client.register('eip155:*', new ExactEvmScheme(account));
// pay() behaves like fetch, but pays a 402 and retries
const pay = wrapFetchWithPayment(fetch, client);
const url = 'https://jeveryword.vercel.app/v1/extract';
const response = await pay(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
text,
fields: [
{ id: 'name', description: "The speaker's full name." },
],
}),
});
const { results } = await response.json();
EVM_PRIVATE_KEY is the key of a wallet holding a little USDC on Base. Each call costs a cent or less. Keep the key in an environment variable on a server, and use a wallet that only holds a small balance. Coding agents can run npx skills add jkrup/jeveryword, which includes this.