A second signature on every payment your agents make.
Before USDC leaves your wallet, Countersign checks who is on the other end: sanctions, issuer freezes, poisoned lookalikes, fake stablecoins, and your own approved payees and limits. One call, a signed answer, and an audit log your accountant can read.
- OFAC sanctions list, read from US Treasury: loading…
- Arc poison index: loading…
- Six chains: Base, Ethereum, Arc, BNB Chain, Solana and X1.
Positive Pay, for stablecoins.
Banks have sold Positive Pay to businesses for decades: a cheque clears only if it matches one you approved.
Countersign brings that rule to USDC. Approve the people and services you pay once. After that, a payment to an approved payee goes through, a lookalike of one is stopped, a payment over your limits is refused, and, if you ask for it, every new payee waits for a person.
Your agents, your payout scripts and your finance team all ask the same question in the same place, and every answer is signed and kept.
Approve your payees
Add the addresses you pay, each with a label. Countersign refuses to approve an address that looks like one already in your book, which is exactly the slip poisoners wait for.
Ask before every payment
Your agent or script sends the payee, chain, amount and token, or passes an x402 payment request exactly as it arrived. A signed answer comes back, usually within a second or two.
A person decides the rest
New payees (when you switch that on) and repeated payments wait in your review queue. Approve and the payee joins your book, so its next check passes that step; reject and the address joins your deny list. Payments over your caps are refused outright.
What every check reads, and where from.
Each answer lists every check with its result and its source. A source we could not read gives COULD_NOT_READ, never a clean answer.
| Check | What it stops | Read from | Chains |
|---|---|---|---|
| Sanctions | DENY a payee or paying wallet on the list | US Treasury OFAC SDN list, refreshed daily from the official file | All six |
| Issuer freeze | DENY an address USDC or USDT has frozen on this chain REVIEW frozen by another coin or on another chain | isBlacklisted on the token contract, read live | Read on Ethereum, Base, Arc; warned on every EVM chain |
| Lookalikes | DENY an address that copies the first and last characters of one you pay | Your payee book and history on every chain; on Arc also every USDC transfer in our index | All six; chain-wide on Arc |
| Fake stablecoins | REVIEW a token that is not the official USDC, USDT or USD1 contract | Official contract addresses | EVM chains, Solana |
| Typos and burns | DENY a broken EIP-55 checksum, the zero or a burn address | The address itself | EVM chains |
| Your rules | DENY over a cap, off your approved book, on your deny list or an unused chain REVIEW new payees (if you choose) and repeats of $1 or more within 10 minutes | Your policy and today's countersigned total (with a key) | All six |
Not covered, said plainly: tracing where money came from across many hops (that is what KYT vendors sell), EU and UK sanctions lists, Solana token-account freezes, and payments that never ask us. ALLOW means none of these checks failed. It is not a guarantee.
Three lines before you pay.
Send the payment you are about to make. With a key, Countersign also applies your rules, remembers whom you paid and writes your audit log.
An x402 agent can hand over the 402 response as it arrived: payee, network, asset and amount are read from it.
Every answer is an EIP-712 signature from our attester that names your account, so you can prove later what was checked, for whom and when. On Arc an ALLOW also carries a voucher for the PayGuard contract, which enforces the Arc payee check on chain.
curl -G https://apexfaucet.xyz/api/countersign/check \
-H "X-Countersign-Key: csk_your_key" \
-d payTo=0xd334ab5151c624cada654854e2879903dc4217ed \
-d chain=base -d amount=25 -d agent=payouts \
-d asset=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
# {"verdict":"ALLOW","checks":[...],"signature":{...}}
# ALLOW: pay. REVIEW: wait for a person. DENY: stop. COULD_NOT_READ: retry.
const res = await fetch(url);
if (res.status === 402) {
// ask Countersign before paying the seller
const v = await fetch('https://apexfaucet.xyz/api/countersign/check', {
method: 'POST',
headers: { 'X-Countersign-Key': KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ requirement: await res.json(), chain: 'base', agent: 'research-bot' }),
}).then((r) => r.json());
if (v.verdict !== 'ALLOW') throw new Error(v.summary);
// ...then pay as your x402 client normally does
}
# $0.005 a check, paid per call over x402:
# USDC on Base, Arc or Solana, or XNT on X1. No sign-up.
GET https://apexfaucet.xyz/api/x402/countersign
?payTo=0x…&chain=base&amount=25&known=0x…
# First call answers 402 with the payment request;
# pay it and repeat the call with the payment header.
Plans.
Start free. Pay when your agents pay real money. Prices are in US dollars and include tax.
Free
For a person about to send.
- 20 checks a day from one address
- All six chains, every check above except your rules and payee memory
- Signed answers
- No account, no card
Builder
For one agent or payout script.
- 3,000 checks a month
- Approved payee book of 100
- Caps, allowlist, deny list, chains
- Review queue a person approves
- Lookalike memory across chains
- 90 days of signed audit log, CSV export
Team
For a team or a fleet of agents.
- 25,000 checks a month
- Approved payee book of 2,000
- Everything in Builder
- A year of signed audit log
/api/x402/countersign.The fine print on plans
Card payments are handled by Stripe; the price you see is the price you pay. You get your key on this site right after paying. Cancel any time from your account page: no further charges, and the key keeps working to the end of the month you paid for.
A check counts when we give an answer. A check we could not finish (COULD_NOT_READ) is not counted, on any plan, and is not sold over x402. Allowances reset on the first of each month (UTC). When a month's checks are used, checks continue over x402 at $0.005, without your rules or log. To move an account from Builder to Team, write to us and we move it with its book and log.
Questions people ask.
Is ALLOW a guarantee that the payment is safe?
No. ALLOW means none of the checks found a reason to stop the payment, from sources read at that moment. Countersign narrows the ways a payment goes wrong; it does not remove them. It is not legal advice.
Do you hold or move my money?
Never. Countersign reads public chain data and answers. Your agent or wallet makes the payment. We never see a private key.
What if a source cannot be read?
Then the answer is COULD_NOT_READ, never ALLOW, and it does not count against your plan. Try again a minute later.
Can a smart contract enforce the answer?
Partly, on Arc. An ALLOW that names the paying wallet and an amount carries a PayeeCheck voucher. The PayGuard contract (0x942e886e4aa48346dd8bc594596f662aab57efeb, verified on Sourcify) moves USDC only against a clean, unexpired voucher, once. It enforces the Arc payee check (poison index, sanctions on the payee, USDC blacklist), not your own rules, which is why a voucher is attached only when Countersign's whole answer is ALLOW. On other chains the signature lets you prove afterwards what was checked.
Sanctions screening is free elsewhere. What am I paying for?
You are right that sanctions lists are free, so we include them at no extra cost and in the free tier. What a plan buys is the part about your own payments: the approved payee book, lookalike memory of everyone you have paid on every chain, caps and lists, the review queue, and a signed log you can hand to an accountant.
What do you store?
For checks made with a key: the check itself (payee, chain, amount, agent label, verdict, signature) in your account's audit log, trimmed to your plan's log period, plus your book, rules and the payees you paid. For free checks: the verdict and chain, and your network address counted for the day to meter the free allowance. Like every web server, ours also keeps request lines and addresses in its access log for 14 days; send checks by POST to keep payee fields out of it. Nothing is sold or shared.
Which chains, and what is read on each?
Base, Ethereum, Arc, BNB Chain, Solana and X1. Sanctions and your own rules apply on all six. Issuer freezes are read for USDC on Ethereum, Base and Arc and USDT on Ethereum. Chain-wide poisoning data covers Arc; elsewhere lookalikes are caught against your own payees.